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'])
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
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]
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'])
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]
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]
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]
def bugged_cards(): sql = multiverse.cached_base_query('bugs IS NOT NULL') rs = db().execute(sql) return [card.Card(r) for r in rs]
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]