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]
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'])
Example #3
0
def test_noimageavailable():
    c = card.Card({
        'name': "Barry's Land",
        'id': 0,
        'multiverseid': 0,
        'names': "Barry's Land"
    })
    assert image_fetcher.download_image([c]) is None
Example #4
0
def search(query):
    like_query = '%{query}%'.format(query=card.canonicalize(query))
    sql = """
        {base_query}
        HAVING name_ascii LIKE %s OR names LIKE %s
        ORDER BY pd_legal DESC, name
    """.format(base_query=multiverse.base_query())
    rs = db().execute(sql, [like_query, like_query])
    return [card.Card(r) for r in rs]
Example #5
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().execute(multiverse.cached_base_query(where=where))
    out = [card.Card(r) for r in rs]
    return sorted(out, key=lambda card: card['name'])
Example #6
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]
Example #7
0
def load_cards(names=None):
    if names:
        names = set(names)
    if names:
        names_clause = 'HAVING LOWER({name_query}) IN ({names})'.format(name_query=card.name_query().format(table='u'), names=', '.join(sqlescape(name).lower() for name in names))
    else:
        names_clause = ''
    sql = """
        {base_query}
        {names_clause}
    """.format(base_query=base_query(), names_clause=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]
Example #8
0
def search(query, fuzzy_threshold=260):
    query = card.canonicalize(query)
    like_query = '%{query}%'.format(query=query)
    if db().is_mysql():
        having = 'name_ascii LIKE ? OR names LIKE ?'
        args = [like_query, like_query]
    else:
        having = """LOWER({name_query}) IN (SELECT word FROM fuzzy WHERE word MATCH ? AND distance <= {fuzzy_threshold})
            OR {name_ascii_query} LIKE ?
            OR SUM(CASE WHEN LOWER(face_name) IN (SELECT word FROM fuzzy WHERE word MATCH ? AND distance <= {fuzzy_threshold}) THEN 1 ELSE 0 END) > 0
        """.format(name_query=card.name_query().format(table='u'), name_ascii_query=card.name_query('name_ascii').format(table='u'), fuzzy_threshold=fuzzy_threshold)
        fuzzy_query = '{query}*'.format(query=query)
        args = [fuzzy_query, like_query, fuzzy_query]
    sql = """
        {base_query}
        HAVING {having}
        ORDER BY pd_legal DESC, name
    """.format(base_query=base_query(), having=having)
    rs = db().execute(sql, args)
    return [card.Card(r) for r in rs]
Example #9
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]
Example #10
0
def bugged_cards():
    sql = base_query() + "HAVING bug_desc IS NOT NULL"
    rs = db().execute(sql)
    return [card.Card(r) for r in rs]
def get_all_cards():
    rs = db().execute(cached_base_query())
    return [card.Card(r) for r in rs]