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)))
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
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)))
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)))