mirror of
https://github.com/mwisnowski/mtg_python_deckbuilder.git
synced 2025-12-20 09:30:13 +01:00
fix(setup): restore security stamp filtering
This commit is contained in:
parent
f48e335e17
commit
4b3ddf5853
4 changed files with 70 additions and 27 deletions
|
|
@ -194,13 +194,36 @@ def filter_dataframe(df: pd.DataFrame, banned_cards: List[str]) -> pd.DataFrame:
|
|||
filtered_df = df.copy()
|
||||
filter_config: FilterConfig = FILTER_CONFIG # Type hint for configuration
|
||||
for field, rules in filter_config.items():
|
||||
if field not in filtered_df.columns:
|
||||
logger.warning('Skipping filter for missing field %s', field)
|
||||
continue
|
||||
|
||||
for rule_type, values in rules.items():
|
||||
if not values:
|
||||
continue
|
||||
|
||||
if rule_type == 'exclude':
|
||||
for value in values:
|
||||
filtered_df = filtered_df[~filtered_df[field].str.contains(value, na=False)]
|
||||
mask = filtered_df[field].astype(str).str.contains(
|
||||
value,
|
||||
case=False,
|
||||
na=False,
|
||||
regex=False
|
||||
)
|
||||
filtered_df = filtered_df[~mask]
|
||||
elif rule_type == 'require':
|
||||
for value in values:
|
||||
filtered_df = filtered_df[filtered_df[field].str.contains(value, na=False)]
|
||||
mask = filtered_df[field].astype(str).str.contains(
|
||||
value,
|
||||
case=False,
|
||||
na=False,
|
||||
regex=False
|
||||
)
|
||||
filtered_df = filtered_df[mask]
|
||||
else:
|
||||
logger.warning('Unknown filter rule type %s for field %s', rule_type, field)
|
||||
continue
|
||||
|
||||
logger.debug(f'Applied {rule_type} filter for {field}: {values}')
|
||||
|
||||
# Remove illegal sets
|
||||
|
|
|
|||
40
code/tests/test_setup_filters.py
Normal file
40
code/tests/test_setup_filters.py
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
import pandas as pd
|
||||
|
||||
from file_setup.setup_utils import filter_dataframe
|
||||
|
||||
|
||||
def _record(name: str, security_stamp: str) -> dict[str, object]:
|
||||
return {
|
||||
"name": name,
|
||||
"faceName": name,
|
||||
"edhrecRank": 100,
|
||||
"colorIdentity": "G",
|
||||
"colors": "G",
|
||||
"manaCost": "{G}",
|
||||
"manaValue": 1,
|
||||
"type": "Creature",
|
||||
"layout": "normal",
|
||||
"text": "",
|
||||
"power": "1",
|
||||
"toughness": "1",
|
||||
"keywords": "",
|
||||
"side": "a",
|
||||
"availability": "paper,arena",
|
||||
"promoTypes": "",
|
||||
"securityStamp": security_stamp,
|
||||
"printings": "RNA",
|
||||
}
|
||||
|
||||
|
||||
def test_filter_dataframe_removes_acorn_and_heart_security_stamps() -> None:
|
||||
df = pd.DataFrame(
|
||||
[
|
||||
_record("Acorn Card", "Acorn"),
|
||||
_record("Heart Card", "heart"),
|
||||
_record("Legal Card", ""),
|
||||
]
|
||||
)
|
||||
|
||||
filtered = filter_dataframe(df, banned_cards=[])
|
||||
|
||||
assert list(filtered["name"]) == ["Legal Card"]
|
||||
Loading…
Add table
Add a link
Reference in a new issue