async def wishlist(request, option): user = await getcurrentuser(request) if not user: response = sanic.response.HTTPReponse() response.status = 401 response.headers['WWW-Authenticate'] = ( 'OpenID identifier="http://steamcommunity.com/openid"' ) return response userkey = getuserkey(user['id']) if option == 'add': index = int(request.form.get('index')) quality = int(request.form.get('quality')) if (await store.sismember('items:indexes', index) and quality in tf2api.getallqualities()): if len(user['wishlist']) < 100: user['wishlist'].append({'index': index, 'quality': quality}) await store.hset(userkey, 'wishlist', user['wishlist']) return sanic.response.text('Added') elif option == 'remove': i = int(request.form.get('i')) if 0 <= i < len(user['wishlist']): del user['wishlist'][i] await store.hset(userkey, 'wishlist', user['wishlist']) return sanic.response.text('Removed')
async def wishlist(option): user = await getcurrentuser(request) if not user: response.status = 401 response.headers['WWW-Authenticate'] = ( 'OpenID identifier="http://steamcommunity.com/openid"') return response userkey = getuserkey(user['id']) if option == 'add': index = int(request.forms.get('index')) quality = int(request.forms.get('quality')) if (await store.sismember('items:indexes', index) and quality in tf2api.getallqualities()): if len(user['wishlist']) < 100: user['wishlist'].append({'index': index, 'quality': quality}) await store.hset(userkey, 'wishlist', user['wishlist']) return 'Added' elif option == 'remove': i = int(request.forms.get('i')) if 0 <= i < len(user['wishlist']): del user['wishlist'][i] await store.hset(userkey, 'wishlist', user['wishlist']) return 'Removed'
def wishlist(option): user = getcurrentuser() if not user: response.status = 401 response.headers["WWW-Authenticate"] = 'OpenID identifier="http://steamcommunity.com/openid"' return userkey = getuserkey(user["id"]) if option == "add": index = int(request.forms.get("index")) quality = int(request.forms.get("quality")) if store.sismember("items:indexes", index) and quality in tf2api.getallqualities(): if len(user["wishlist"]) < 100: user["wishlist"].append({"index": index, "quality": quality}) store.hset(userkey, "wishlist", user["wishlist"]) return "Added" elif option == "remove": i = int(request.forms.get("i")) if 0 <= i < len(user["wishlist"]): del user["wishlist"][i] store.hset(userkey, "wishlist", user["wishlist"]) return "Removed"
from collections import namedtuple, defaultdict, OrderedDict import tf2api DENOMREGEX = (r'((?:earb|b)uds?|' 'keys?|' 'ref(?:ined|s)?|' 'rec(?:laimed|s)?|' 'scraps?|' 'wea?p(?:on)?s?)') PRICEREGEX = (r'(?:(\d+(?:\.\d+)?) ?{})'.format(DENOMREGEX)) QUALITYREGEX = r'({}|collector|collectors|dirty|uncraft(?:able)?)'.format( '|'.join(i.lower() for i in tf2api.getallqualities().values())) async def gettf2info(apikey, backpackkey, tradekey, blueprintsfilename): """Return a named tuple which contains information from multiple sources about TF2 items""" schema, storeprices = await asyncio.gather( tf2api.getschema(apikey), tf2api.getstoreprices(apikey) ) items = tf2api.getitems(schema) itemsbyname = tf2api.getitemsbyname(schema) itemsets = tf2api.getitemsets(schema) attributes = tf2api.getattributes(schema) effects = tf2api.getparticleeffects(schema)
async def main(flush): store = await create_redis(('localhost', 6379), commands_factory=Redis) tf2info = await tf2search.gettf2info(config.apikey, config.backpackkey, config.tradekey, config.blueprintsfile) if flush: await store.delete('items') await store.delete_all('items:*') await store.delete_all('item:*') suggestions = [[], [], []] sitemap = Sitemap() sitemap.add(config.homepage) all_classes = [class_.lower() for class_ in tf2api.getallclasses()] all_tags = list(tf2api.getalltags()) all_qualities = [quality.replace("'", '').lower() for quality in tf2api.getallqualities().values()] keywords = all_classes + all_tags + all_qualities for keyword in keywords: sitemap.add(f'{config.homepage}/search/{keyword}') for class_tag in all_classes + all_tags: for quality in all_qualities: sitemap.add(f'{config.homepage}/search/{quality}-{class_tag}') for class_ in all_classes: for tag in all_tags: sitemap.add(f'{config.homepage}/search/{class_}-{tag}') for quality in all_qualities: sitemap.add( f'{config.homepage}/search/{quality}-{class_}-{tag}' ) for index in tf2info.items: pipe = store.pipeline() itemdict = tf2search.createitemdict(index, tf2info) name = itemdict['name'] pipe.hmset_dict(getitemkey(index), itemdict) pipe.sadd('items', index) classes = itemdict['classes'] tags = itemdict['tags'] if index == tf2info.itemsbyname[name]['defindex']: slug = slugify(name) pipe.hmset_dict('items:slugs', {slug: index}) if tf2search.isvalidresult(itemdict, False): if not classes: pipe.sadd(getclasskey(), index) if len(classes) > 1: pipe.sadd(getclasskey(multi=True), index) if not tags: pipe.sadd(gettagkey(), index) for class_ in classes: pipe.sadd(getclasskey(class_), index) for tag in tags: pipe.sadd(gettagkey(tag), index) if tf2search.isvalidresult(itemdict): pipe.sadd('items:indexes', index) pipe.hmset_dict('items:names', {name: index}) path = f'{config.homepage}/{slug}' suggestions[0].append(name) suggestions[1].append('{} - {}'.format( ', '.join(itemdict['classes']), ', '.join(itemdict['tags']))) suggestions[2].append(path) sitemap.add(path) await pipe.execute() await store.delete('items:new') for index in tf2info.newstoreprices: await store.sadd('items:new', index) bundles = {str(k): v for k, v in tf2info.bundles.items()} data = {'items:sets': tf2info.itemsets, 'items:bundles': bundles, 'items:suggestions': suggestions, 'items:lastupdated': time.time(), 'sitemap': sitemap.toxml()} await store.mset_dict(data)
async def main(flush): store = await create_redis(('localhost', 6379), commands_factory=Redis) tf2info = tf2search.gettf2info(config.apikey, config.backpackkey, config.tradekey, config.blueprintsfile) if flush: await store.delete('items') await store.delete_all('items:*') await store.delete_all('item:*') suggestions = [[], [], []] sitemap = Sitemap() sitemap.add(config.homepage) all_classes = [class_.lower() for class_ in tf2api.getallclasses()] all_tags = list(tf2api.getalltags()) all_qualities = [quality.replace("'", '').lower() for quality in tf2api.getallqualities().values()] keywords = all_classes + all_tags + all_qualities for keyword in keywords: sitemap.add(f'{config.homepage}/search/{keyword}') for class_tag in all_classes + all_tags: for quality in all_qualities: sitemap.add(f'{config.homepage}/search/{quality}-{class_tag}') for class_ in all_classes: for tag in all_tags: sitemap.add(f'{config.homepage}/search/{class_}-{tag}') for quality in all_qualities: sitemap.add( f'{config.homepage}/search/{quality}-{class_}-{tag}' ) for index in tf2info.items: pipe = store.pipeline() itemdict = tf2search.createitemdict(index, tf2info) name = itemdict['name'] pipe.hmset_dict(getitemkey(index), itemdict) pipe.sadd('items', index) classes = itemdict['classes'] tags = itemdict['tags'] if index == tf2info.itemsbyname[name]['defindex']: slug = slugify(name) pipe.hmset_dict('items:slugs', {slug: index}) if tf2search.isvalidresult(itemdict, False): if not classes: pipe.sadd(getclasskey(), index) if len(classes) > 1: pipe.sadd(getclasskey(multi=True), index) if not tags: pipe.sadd(gettagkey(), index) for class_ in classes: pipe.sadd(getclasskey(class_), index) for tag in tags: pipe.sadd(gettagkey(tag), index) if tf2search.isvalidresult(itemdict): pipe.sadd('items:indexes', index) pipe.hmset_dict('items:names', {name: index}) path = f'{config.homepage}/{slug}' suggestions[0].append(name) suggestions[1].append('{} - {}'.format( ', '.join(itemdict['classes']), ', '.join(itemdict['tags']))) suggestions[2].append(path) sitemap.add(path) await pipe.execute() await store.delete('items:new') for index in tf2info.newstoreprices: await store.sadd('items:new', index) bundles = {str(k): v for k, v in tf2info.bundles.items()} data = {'items:sets': tf2info.itemsets, 'items:bundles': bundles, 'items:suggestions': suggestions, 'items:lastupdated': time.time(), 'sitemap': sitemap.toxml()} await store.mset_dict(data)