Пример #1
0
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
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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,
    )
Пример #5
0
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)
Пример #6
0
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)