def last_pd_rotation_changes():
    current_code = rotation.last_rotation_ex()['code']
    previous = multiverse.SEASONS[multiverse.SEASONS.index(current_code) - 1]
    previous_id = multiverse.get_format_id(
        "Penny Dreadful {f}".format(f=previous))
    current_id = multiverse.get_format_id("Penny Dreadful")
    return changes_between_formats(previous_id, current_id)
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 legal_cards(force=False):
    if len(LEGAL_CARDS) == 0 or force:
        new_list = multiverse.set_legal_cards(force)
        if new_list is None:
            sql = 'SELECT bq.name FROM ({base_query}) AS bq WHERE bq.id IN (SELECT card_id FROM card_legality WHERE format_id = {format_id})'.format(
                base_query=multiverse.base_query(),
                format_id=multiverse.get_format_id('Penny Dreadful'))
            new_list = [row['name'] for row in db().execute(sql)]
        LEGAL_CARDS.clear()
        for name in new_list:
            LEGAL_CARDS.append(name)
    return LEGAL_CARDS