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]
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'])
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 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]
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 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'])
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
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 bugged_cards() -> List[Card]: sql = multiverse.cached_base_query('bugs IS NOT NULL') rs = db().select(sql) return [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]