Spaces:
Running
Running
| import streamlit as st | |
| import pandas as pd | |
| import re | |
| import urllib.parse | |
| def compose_scryfall_url(cardname: str) -> str: | |
| """Compose a Scryfall URL from the passed card name""" | |
| return f"https://scryfall.com/search?q=prefer%3Aoldest%20!%22{urllib.parse.quote_plus(cardname)}%22" | |
| def row_to_link(row: pd.DataFrame) -> None: | |
| """Prints a list item with a Scryfall link for the card in the row passed""" | |
| cardname = row["name"] | |
| if row.name_ja is not "": | |
| cardname = f"{cardname} / {row.name_ja}" | |
| st.write(f"- [{cardname}]({row.link})") | |
| def row_to_button_link(row: pd.DataFrame) -> None: | |
| """Prints a list item with a Scryfall link for the card in the row passed""" | |
| cardname = row.English | |
| if row.ζ₯ζ¬θͺ is not "": | |
| cardname = f"{cardname} / {row.ζ₯ζ¬θͺ}" | |
| st.write(f"- [{cardname}]({compose_scryfall_url(row.English)})") | |
| def get_legal_cardnames(cardname: str, mslist_df: pd.DataFrame) -> list: | |
| """Returns a list with legality (boolean) plus the English and Japanese | |
| names for the card if there is an exact match, or the user's input if there is not. | |
| """ | |
| if len(cardname) < 1: | |
| return [False, [], []] | |
| cardname_en_list = [] | |
| cardname_ja_list = [] | |
| legal = False | |
| english_match = mslist_df[mslist_df["name"].str.lower() == cardname.lower()] | |
| if english_match.shape[0] > 0: | |
| legal = True | |
| cardname_en_list = english_match["name"].to_list() | |
| cardname_ja_list = english_match["name_ja"].to_list() | |
| japanese_match = mslist_df[mslist_df["name_ja"] == cardname] | |
| if japanese_match.shape[0] > 0: | |
| legal = True | |
| cardname_en_list = japanese_match["name"].to_list() | |
| cardname_ja_list = japanese_match["name_ja"].to_list() | |
| if len(cardname_en_list) > 0: | |
| legalname_en = cardname_en_list[0] | |
| else: | |
| legalname_en = cardname | |
| if len(cardname_ja_list) > 0: | |
| legalname_ja = cardname_ja_list[0] | |
| else: | |
| legalname_ja = cardname | |
| return [ | |
| legal, | |
| legalname_en, | |
| legalname_ja, | |
| ] | |
| def remove_number_of_copies(line: str) -> str: | |
| """Remove the number of copies in front of the card name | |
| from a line in a card list | |
| """ | |
| if len(line.strip()) < 1: | |
| return None | |
| pattern = re.compile("^([0-9]+) +") | |
| return pattern.sub("", line) | |
| def is_cardname_legal(cardname: str, mslist_df: pd.DataFrame) -> bool: | |
| """Returns wether a card with exactly the passed name is legal in the format""" | |
| if mslist_df[mslist_df["name"].str.lower() == cardname.lower()].shape[0] > 0: | |
| return True | |
| if mslist_df[mslist_df["name_ja"] == cardname].shape[0] > 0: | |
| return True | |
| return False | |
| def legal_to_checkmark(row: pd.DataFrame) -> pd.DataFrame: | |
| if row["islegal"]: | |
| row["Legal"] = "β " | |
| return row | |
| row["Legal"] = "π«" | |
| return row | |
| def split_names_list(row: pd.DataFrame): | |
| """Splits the English and Japanese card names in a list into two different columns""" | |
| if not isinstance(row["legalnames"], list): | |
| return row | |
| row["islegal"] = row["legalnames"][0] | |
| row["English"] = row["legalnames"][1] | |
| if row["legalnames"][1] is not None: | |
| row["ζ₯ζ¬θͺ"] = row["legalnames"][2] | |
| return row | |