Alejandro Cremades
Show banned cards as banned
0852a22
raw
history blame
3.08 kB
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_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 = []
banned_list = []
legal = False
banned = 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()
banned_list = english_match["banned"].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()
banned_list = japanese_match["banned"].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
if len(banned_list) > 0:
banned = banned_list[0]
else:
banned = False
return [legal, legalname_en, legalname_ja, banned]
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 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]
row["isbanned"] = row["legalnames"][3]
return row