コード例 #1
0
def make_final_list() -> None:
    planes = fetcher_internal.fetch_json(
        'https://api.scryfall.com/cards/search?q=t:plane%20or%20t:phenomenon'
    )['data']
    plane_names = [p['name'] for p in planes]
    files = rotation.files()
    lines: List[str] = []
    for line in fileinput.input(files):
        line = text.sanitize(line)
        if line in plane_names:
            print(f'DISCARDED: [{line}] is a plane.')
            continue
        lines.append(line)
    scores = Counter(lines).most_common()

    passed: List[str] = []
    for name, count in scores:
        if count >= TOTAL_RUNS / 2:
            passed.append(name)
    final = list(passed)
    if is_supplemental():
        temp = set(passed)
        final = list(temp.union([c + '\n' for c in fetcher.legal_cards()]))
    final.sort()
    h = open(os.path.join(configuration.get_str('legality_dir'),
                          'legal_cards.txt'),
             mode='w',
             encoding='utf-8')
    h.write(''.join(final))
    h.close()
    print('Generated legal_cards.txt.  {0}/{1} cards.'.format(
        len(passed), len(scores)))
コード例 #2
0
def set_legal_cards(force=False, season=None):
    new_list = ['']
    try:
        new_list = fetcher.legal_cards(force, season)
    except fetcher.FetchException:
        pass
    if season is None:
        format_id = get_format_id('Penny Dreadful')
    else:
        format_id = get_format_id(
            'Penny Dreadful {season}'.format(season=season), True)

    if new_list == [''] or new_list is None:
        return None
    db().execute('DELETE FROM card_legality WHERE format_id = %s', [format_id])
    sql = """INSERT INTO card_legality (format_id, card_id, legality)
        SELECT {format_id}, bq.id, 'Legal'
        FROM ({base_query}) AS bq
        WHERE name IN ({names})
    """.format(format_id=format_id,
               base_query=base_query(),
               names=', '.join(sqlescape(name) for name in new_list))
    db().execute(sql)
    # Check we got the right number of legal cards.
    n = db().value('SELECT COUNT(*) FROM card_legality WHERE format_id = %s',
                   [format_id])
    if n != len(new_list):
        print(
            "Found {n} pd legal cards in the database but the list was {len} long"
            .format(n=n, len=len(new_list)))
        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=base_query(), format_id=format_id)
        db_legal_list = [row['name'] for row in db().execute(sql)]
        print(set(new_list).symmetric_difference(set(db_legal_list)))
    return new_list
コード例 #3
0
def make_final_list() -> None:
    files = rotation.files()
    lines: List[str] = []
    for line in fileinput.input(files):
        line = text.sanitize(line)
        lines.append(line)
    scores = Counter(lines).most_common()

    passed: List[str] = []
    for name, count in scores:
        if count >= TOTAL_RUNS / 2:
            passed.append(name)
    final = list(passed)
    if is_supplemental():
        temp = set(passed)
        final = list(temp.union([c + '\n' for c in fetcher.legal_cards()]))
    final.sort()
    h = open(os.path.join(configuration.get_str('legality_dir'),
                          'legal_cards.txt'),
             mode='w',
             encoding='utf-8')
    h.write(''.join(final))
    h.close()
    print('Generated legal_cards.txt.  {0}/{1} cards.'.format(
        len(passed), len(scores)))
コード例 #4
0
def set_legal_cards(season: str = None) -> None:
    new_list: Set[str] = set()
    try:
        new_list = set(fetcher.legal_cards(force=True, season=season))
    except fetcher.FetchException:
        pass
    if season is None:
        format_id = get_format_id('Penny Dreadful')
    else:
        format_id = get_format_id(
            'Penny Dreadful {season}'.format(season=season), True)

    if new_list == set() or new_list is None:
        return
    if season is not None:
        # Older formats don't change
        populated = db().select(
            'SELECT id from card_legality WHERE format_id = %s LIMIT 1',
            [format_id])
        if populated:
            return

    # In case we get windows line endings.
    new_list = set(c.rstrip() for c in new_list)

    db().begin('set_legal_cards')
    db().execute('DELETE FROM card_legality WHERE format_id = %s', [format_id])
    db().execute('SET group_concat_max_len=100000')

    all_cards = db().select(base_query_lite())
    legal_cards = []
    for row in all_cards:
        if row['name'] in new_list:
            legal_cards.append("({format_id}, {card_id}, 'Legal')".format(
                format_id=format_id, card_id=row['id']))
    sql = """INSERT INTO card_legality (format_id, card_id, legality)
             VALUES {values}""".format(values=', '.join(legal_cards))

    db().execute(sql)
    db().commit('set_legal_cards')
    # Check we got the right number of legal cards.
    n = db().value('SELECT COUNT(*) FROM card_legality WHERE format_id = %s',
                   [format_id])
    if n != len(new_list):
        print(
            'Found {n} pd legal cards in the database but the list was {len} long'
            .format(n=n, len=len(new_list)))
        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=base_query(), format_id=format_id)
        db_legal_list = [row['name'] for row in db().select(sql)]
        print(set(new_list).symmetric_difference(set(db_legal_list)))