diff --git a/main.py b/main.py index 7cac5ec..38cb86c 100644 --- a/main.py +++ b/main.py @@ -1,30 +1,46 @@ from __future__ import annotations #import os -import requests # type: ignore +import inquirer.prompt # type: ignore import pandas as pd # type: ignore +import requests # type: ignore #import scrython # type: ignore +banned_cards = ['Ancestral Recall', 'Balance', 'Biorhythm', 'Black Lotus', + 'Braids, Cabal Minion', 'Chaos Orb', 'Coalition Victory', + 'Channel', 'Dockside Extortionist', 'Emrakul, the Aeons Torn', + 'Erayo, Soratami Ascendant', 'Falling Star', 'Fastbond', + 'Flash', 'Gifts Ungiven', 'Golos, Tireless Pilgrim', + 'Griselbrand', 'Hullbreacher', 'Iona, Shield of Emeria', + 'Karakas', 'Jeweled Lotus', 'Leovold, Emissary of Trest', + 'Library of Alexandria', 'Limited Resources', 'Lutri, the Spellchaser', + 'Mana Crypt', 'Mox Emerald', 'Mox Jet', 'Mox Pearl', 'Mox Ruby', + 'Mox Sapphire', 'Nadu, Winged Wisdom', 'Panoptic Mirror', + 'Paradox Engine', 'Primeval Titan', 'Prophet of Kruphix', + 'Recurring Nightmare', 'Rofellos, Llanowar Emissary', 'Shahrazad', + 'Sundering Titan', 'Sway of the Stars', 'Sylvan Primordial', + 'Time Vault', 'Time Walk', 'Tinker', 'Tolarian Academy', + 'Trade Secrets', 'Upheaval', 'Yawgmoth\'s Bargain'] + def filter_by_color(df, column_name, value, new_csv_name): # Filter dataframe filtered_df = df[df[column_name] == value] # Save the filtered dataframe to a new csv file - columns_to_keep = ['name', 'colorIdentity', 'colors', 'manaCost', 'manaValue', 'type', 'keywords', 'power', 'toughness'] + columns_to_keep = ['name', 'edhrecRank','colorIdentity', 'colors', 'manaCost', 'manaValue', 'type', 'keywords', 'text', 'power', 'toughness', 'printings'] filtered_df = filtered_df[columns_to_keep] filtered_df.drop_duplicates(subset='name', inplace=True) filtered_df.to_csv(new_csv_name, index=False) def initial_setup(): # Check if the overall cards.csv file exists - print('Checking if setup was previously finished.') + print('Checking if setup was previously finished.\n') while True: try: - with open('setup_done.txt', 'r') as setup: - setup.close() - print('Setup is done.') + with open('setup_done.txt', 'r'): + print('Setup is done.\n') break except FileNotFoundError: - print('Checking for cards.csv file.') + print('Checking for cards.csv file.\n') while True: try: with open('csv_files/cards.csv', 'r', encoding='utf-8'): @@ -39,17 +55,17 @@ def initial_setup(): df = pd.read_csv('csv_files/cards.csv') df['colorIdentity'] = df['colorIdentity'].fillna('None') - print('Checking for color identity sorted files.') - print('Checking for colorless_cards.csv.') + print('Checking for color identity sorted files.\n') + print('Checking for colorless_cards.csv.\n') while True: try: with open('csv_files/colorless_cards.csv', 'r', encoding='utf-8'): - print('colorless_cards.csv exists.') + print('colorless_cards.csv exists.\n') break except FileNotFoundError: - print('colorless_cards.csv not found, creating it.') + print('colorless_cards.csv not found, creating it.\n') filter_by_color(df, 'colorIdentity', 'None', 'csv_files/colorless_cards.csv') - print('Checking for mono-color card lists.') + print('Checking for mono-color card lists.\n') while True: print('Checking for white_cards.csv.') while True: @@ -97,7 +113,7 @@ def initial_setup(): print('green_cards.csv not found, creating it.') filter_by_color(df, 'colorIdentity', 'G', 'csv_files/green_cards.csv') break - print('Checking for color-pair lists') + print('Checking for color-pair lists.\n') while True: print('Checking for azorius_cards.csv.') while True: @@ -190,7 +206,7 @@ def initial_setup(): print('gruul_cards.csv not found, creating it.') filter_by_color(df, 'colorIdentity', 'G, R', 'csv_files/gruul_cards.csv') break - print('Checking for three-color sets.') + print('Checking for three-color sets.\n') while True: print('Checking for bant_cards.csv.') while True: @@ -274,7 +290,7 @@ def initial_setup(): print('temur_cards.csv not found, creating it.') filter_by_color(df, 'colorIdentity', 'G, R, U', 'csv_files/temur_cards.csv') break - print('Checking for four color sets.') + print('Checking for four color sets.\n') while True: print('Checking for dune_cards.csv.') while True: @@ -322,7 +338,7 @@ def initial_setup(): print('yore_cards.csv not found, creating it.') filter_by_color(df, 'colorIdentity', 'B, R, U, W', 'csv_files/yore_cards.csv') break - print('Checking for wubrg_cards.csv.') + print('Checking for wubrg_cards.csv.\n') while True: try: with open('csv_files/wubrg_cards.csv', 'r', encoding='utf-8'): @@ -331,12 +347,237 @@ def initial_setup(): except FileNotFoundError: print('wubrg_cards.csv not found, creating it.') filter_by_color(df, 'colorIdentity', 'B, G, R, U, W', 'csv_files/wubrg_cards.csv') - print('Creating setup_done.txt file') + print('Creating setup_done.txt file.\n') with open('setup_done.txt', 'w') as f: - f.write('Setup is done') + f.write('Setup is done.') f.close() +staple_lists = ['Colorless', 'White', 'Blue', 'Black'] +colorless_staples = [] # type: ignore +white_staples = [] # type: ignore +blue_staples = [] # type: ignore +black_staples = [] # type: ignore +def make_staples_list(): + # Generate list of staples by color. This is subjective and can be modified as seen fit. + # At present it's based on top cards from edhrec, using the first 15 or so of each color + print('Making staple lists.\n') + print('Colorless staples:') + global colorless_staples + colorless_staples = [ + 'Sol Ring', + 'Arcane Signet', + 'Fellwar Stone', + 'Skullclamp', + 'Lightning Greaves', + 'Swiftfoot Boots', + 'Thought Vessel', + 'Solemn Simulacrum', + 'Mind Stone', + 'Wayfarer\'s Bauble', + 'Commander\'s Sphere' + ] + colorless_staples.sort() + print(colorless_staples) + print('White staples:') + global white_staples + white_staples = [ + 'Swords to Plowshares', + 'Path to Exile', + 'Generous Gift', + 'Smothering Tithe', + 'Esper Sentinel', + 'Teferi\'s Protection', + 'Enlightened Tutor', + 'Farewell', + 'Austere Command', + 'Ghostly Prison', + 'Sun Titan', + 'Flawless Maneuver', + 'Akroma\'s Will', + 'Annointed Procession', + 'Wrath of God' + ] + print(white_staples) + print('Blue staples:') + global blue_staples + blue_staples = [ + 'Counterspell', + 'Cyclonic Rift', + 'Rhystic Study', + 'Negate', + 'Brainstorm', + 'An Offer You Can\'t Refuse', + 'Arcane Denial', + 'Mystic Remora', + 'Fierce Guardianship', + 'Swan Song', + 'Mana Drain', + 'Mystical Tutor', + 'Windfall', + 'Ponder', + 'Frantic Search', + 'Pongify', + 'Propoganda', + 'Preordain', + 'Opt', + 'Rapid Hybridization' + ] + print(blue_staples) + print('Black staples:') + global black_staples + black_staples = [ + 'Demonic Tutor', + 'Dark Ritual', + 'Vampiric Tutor', + 'Feed the Swarm', + 'Toxic Deluge', + 'Reanimate', + 'Phyrexian Arena', + 'Blood Artist', + 'Victimize', + 'Deadly Dispute', + 'Deadly Rollick', + 'Black Market Connections', + 'Zulaport Cutthroat', + 'Village Rites', + 'Sign in Blood', + 'Animate Dead', + 'Bolas\'s Citadel', + 'Gray Merchant of Asphodel', + 'Syr Konrad, the Grim', + 'Diabolic Intent' + ] + print(black_staples) -#df = pd.read_csv('cards.csv') + return colorless_staples, white_staples, blue_staples, black_staples -# -initial_setup() \ No newline at end of file +def generate_staple_lists(): + # Colorless staples + global colorless_staples + print('Colorless staples:') + while True: + try: + with open('staples/colorless.txt', 'r') as file: + colorless_staples = file.read().split('\n') + del colorless_staples[-1] + print('\n'.join(colorless_staples), '\n') + break + except FileNotFoundError: + print('Generating colorless staples list.') + df = pd.read_csv('csv_files/colorless_cards.csv') + df['edhrecRank'] = pd.to_numeric(df['edhrecRank'], downcast='integer', errors='coerce') + df = df.dropna(subset=['edhrecRank']) + df['edhrecRank'] = df['edhrecRank'].astype(int) + columns_to_keep = ['name', 'edhrecRank', 'type'] + df = df[columns_to_keep] + i = 1 + while len(colorless_staples) < 20: + for index, row in df.iterrows(): + if row['edhrecRank'] == i: + if 'Land' not in row['type'] and row['name'] not in banned_cards: + colorless_staples.append(row['name']) + i += 1 + #print(colorless_staples) + with open('staples/colorless.txt', 'w') as f: + for items in colorless_staples: + f.write('%s\n' %items) + # White staples + print('White staples:') + global white_staples + while True: + try: + with open('staples/white.txt', 'r') as file: + white_staples = file.read().split('\n') + del white_staples[-1] + print('\n'.join(white_staples), '\n') + break + except FileNotFoundError: + print('Generating white staples list.') + df = pd.read_csv('csv_files/white_cards.csv') + df['edhrecRank'] = pd.to_numeric(df['edhrecRank'], downcast='integer', errors='coerce') + df = df.dropna(subset=['edhrecRank']) + df['edhrecRank'] = df['edhrecRank'].astype(int) + columns_to_keep = ['name', 'edhrecRank', 'type'] + df = df[columns_to_keep] + i = 1 + while len(white_staples) < 20: + for index, row in df.iterrows(): + if row['edhrecRank'] == i: + if row['name'] not in banned_cards: + white_staples.append(row['name']) + i += 1 + #print(white_staples) + with open('staples/white.txt', 'w') as f: + for items in white_staples: + f.write('%s\n' %items) + + + +def get_card_info(): + question = [ + inquirer.List( + 'staple_list', + message='Choose a staple list to check through', + choices=staple_lists, + carousel=True + ) + ] + answer = inquirer.prompt(question) + staple_list_choice = answer['staple_list'] + if staple_list_choice == 'Colorless': + staple = 'colorless' + question = [ + inquirer.List( + 'card_list', + message='Choose a card from the list.', + choices=colorless_staples, + carousel=True + ) + ] + answer = inquirer.prompt(question) + card_choice = answer['card_list'] + elif staple_list_choice == 'White': + staple = 'white' + question = [ + inquirer.List( + 'card_list', + message='Choose a card from the list.', + choices=white_staples, + carousel=True + ) + ] + answer = inquirer.prompt(question) + card_choice = answer['card_list'] + elif staple_list_choice == 'Blue': + staple = 'blue' + question = [ + inquirer.List( + 'card_list', + message='Choose a card from the list.', + choices=blue_staples, + carousel=True + ) + ] + answer = inquirer.prompt(question) + card_choice = answer['card_list'] + elif staple_list_choice == 'Black': + staple = 'black' + question = [ + inquirer.List( + 'card_list', + message='Choose a card from the list.', + choices=black_staples, + carousel=True + ) + ] + answer = inquirer.prompt(question) + card_choice = answer['card_list'] + df = pd.read_csv(f'csv_files/{staple}_cards.csv') + filtered_df = df[df['name'] == card_choice] + columns_to_keep = ['name', 'colorIdentity', 'colors', 'manaCost', 'manaValue', 'type', 'keywords', 'power', 'toughness', 'text'] + filtered_df = filtered_df[columns_to_keep] + print(filtered_df) + +initial_setup() +#make_staples_list() +generate_staple_lists() +#get_card_info() \ No newline at end of file