async def home(request): t0 = await store.get('items:lastupdated') lastupdated = int(time.time() - t0) // 60 newitems = await getitems(await store.srandmember('items:new', 5)) user = await getcurrentuser(request) response = await render('home.html', homepage=config.homepage, user=user, tags=tf2api.getalltags(), newitems=newitems, message=random.choice(config.messages), lastupdated=lastupdated) if user: expires = datetime.now() + session_age response.cookies['steam_id'] = user['id'] response.cookies['steam_id']['expires'] = expires else: del response.cookies['sid'] del response.cookies['steam_id'] return response
def _gettag(word): """Parse a word and return an item tag if it matches one""" weapon = ('wep', 'weap') if word in ('watch', 'watches'): return 'pda2' elif word in weapon or word in _pluralize(weapon): return 'weapon' for tag in tf2api.getalltags(): if word in (tag, tag + 's'): return tag
def home(): t0 = store.get("items:lastupdated") lastupdated = int(time.time() - t0) // 60 newitems = getitems(store.srandmember("items:new", 5)) return render( "home.html", homepage=config.homepage, user=getcurrentuser(), tags=tf2api.getalltags(), newitems=newitems, message=random.choice(config.messages), lastupdated=lastupdated, )
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)