示例#1
0
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')
示例#2
0
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'
示例#3
0
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"
示例#4
0
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)
示例#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)