Ejemplo n.º 1
0
def load_cards(names: Iterable[str] = None,
               where: Optional[str] = None) -> List[Card]:
    if names == []:
        return []
    if names:
        setnames = set(names)
    else:
        setnames = set()
    if setnames:
        names_clause = 'c.name IN ({names})'.format(names=', '.join(
            sqlescape(name) for name in setnames))
    else:
        names_clause = '(1 = 1)'
    if where is None:
        where = '(1 = 1)'
    sql = multiverse.cached_base_query('({where} AND {names})'.format(
        where=where, names=names_clause))
    rs = db().select(sql)
    if setnames and len(setnames) != len(rs):
        missing = setnames.symmetric_difference([r['name'] for r in rs])
        raise TooFewItemsException(
            'Expected `{namelen}` and got `{rslen}` with `{names}`.  missing=`{missing}`'
            .format(namelen=len(setnames),
                    rslen=len(rs),
                    names=setnames,
                    missing=missing))
    return [Card(r) for r in rs]
Ejemplo n.º 2
0
def if_todays_prices(out: bool = True) -> List[Card]:
    current_format = multiverse.get_format_id('Penny Dreadful')
    if out:
        not_clause = ''
        compare = '<'
    else:
        not_clause = 'NOT'
        compare = '>='

    where = """
        c.id {not_clause} IN
            (SELECT card_id FROM card_legality
                WHERE format_id = {format})
        AND c.name in (SELECT name FROM `{prices_database}`.cache WHERE week {compare} 0.5)
        AND c.layout IN ({layouts})
    """.format(not_clause=not_clause,
               format=current_format,
               prices_database=configuration.get('prices_database'),
               compare=compare,
               layouts=', '.join([
                   sqlescape(layout)
                   for layout in multiverse.playable_layouts()
               ]))

    rs = db().select(multiverse.cached_base_query(where=where))
    cards = [Card(r) for r in rs]
    return sorted(cards, key=lambda card: card['name'])
Ejemplo n.º 3
0
def if_todays_prices(out=True):
    current_format = multiverse.get_format_id("Penny Dreadful")
    if out:
        not_clause = ''
        compare = '<'
    else:
        not_clause = 'NOT'
        compare = '>='

    where = '''
        c.id {not_clause} IN
            (SELECT card_id FROM card_legality
                WHERE format_id = {format})
        AND c.name in (SELECT name from prices.cache where week {compare} 0.5)
        AND c.layout IN ({layouts})
    '''.format(not_clause=not_clause,
               format=current_format,
               compare=compare,
               layouts=', '.join([
                   sqlescape(k) for k, v in multiverse.layouts().items() if v
               ]))

    rs = db().execute(multiverse.cached_base_query(where=where))
    out = [card.Card(r) for r in rs]
    return sorted(out, key=lambda card: card['name'])
Ejemplo n.º 4
0
def search(query: str) -> List[Card]:
    where = parse(tokenize(query))
    sql = """{base_query}
        ORDER BY pd_legal DESC, name
    """.format(base_query=multiverse.cached_base_query(where))
    rs = db().select(sql)
    return [Card(r) for r in rs]
Ejemplo n.º 5
0
def search(query):
    where = parse(tokenize(query))
    sql = """{base_query}
        ORDER BY pd_legal DESC, name
    """.format(base_query=multiverse.cached_base_query(where))
    rs = db().execute(sql)
    return [card.Card(r) for r in rs]
Ejemplo n.º 6
0
def query_diff_formats(f1, f2):
    where = """
    c.id IN
        (SELECT card_id FROM card_legality
            WHERE format_id = {format1})
    AND c.id NOT IN
        (SELECT card_id FROM card_legality WHERE format_id = {format2})
    """.format(format1=f1, format2=f2)

    rs = db().select(multiverse.cached_base_query(where=where))
    out = [Card(r) for r in rs]
    return sorted(out, key=lambda card: card['name'])
Ejemplo n.º 7
0
async def add_cards_and_update_async(printings: List[CardDescription]) -> None:
    if not printings:
        return
    ids = await multiverse.insert_cards_async(printings)
    multiverse.add_to_cache(ids)
    cs = [
        Card(r) for r in db().select(
            multiverse.cached_base_query('c.id IN (' +
                                         ','.join([str(id)
                                                   for id in ids]) + ')'))
    ]
    whoosh_write.reindex_specific_cards(cs)
    for c in cs:
        CARDS_BY_NAME[c.name] = c
Ejemplo n.º 8
0
def load_cards(names=None, where=None):
    if names:
        names = set(names)
    if names:
        names_clause = 'LOWER(c.name) IN ({names})'.format(names=', '.join(sqlescape(name).lower() for name in names))
    else:
        names_clause = '(1 = 1)'
    if where is None:
        where = '(1 = 1)'
    sql = multiverse.cached_base_query('({where} AND {names})'.format(where=where, names=names_clause))
    rs = db().execute(sql)
    if names and len(names) != len(rs):
        missing = names.symmetric_difference([r['name'] for r in rs])
        raise TooFewItemsException('Expected `{namelen}` and got `{rslen}` with `{names}`.  missing=`{missing}`'.format(namelen=len(names), rslen=len(rs), names=names, missing=missing))
    return [card.Card(r) for r in rs]
Ejemplo n.º 9
0
def bugged_cards() -> List[Card]:
    sql = multiverse.cached_base_query('bugs IS NOT NULL')
    rs = db().select(sql)
    return [Card(r) for r in rs]
Ejemplo n.º 10
0
def bugged_cards():
    sql = multiverse.cached_base_query('bugs IS NOT NULL')
    rs = db().execute(sql)
    return [card.Card(r) for r in rs]