mirror of
https://github.com/mwisnowski/mtg_python_deckbuilder.git
synced 2025-12-17 08:00:13 +01:00
fix(lint): improved type checking and code maintainability
This commit is contained in:
parent
83fe527979
commit
40023e93b8
62 changed files with 187 additions and 197 deletions
|
|
@ -36,7 +36,7 @@ except Exception: # pragma: no cover
|
|||
|
||||
try:
|
||||
# Support running as `python code/scripts/build_theme_catalog.py` when 'code' already on path
|
||||
from scripts.extract_themes import ( # type: ignore
|
||||
from scripts.extract_themes import (
|
||||
BASE_COLORS,
|
||||
collect_theme_tags_from_constants,
|
||||
collect_theme_tags_from_tagger_source,
|
||||
|
|
@ -51,7 +51,7 @@ try:
|
|||
)
|
||||
except ModuleNotFoundError:
|
||||
# Fallback: direct relative import when running within scripts package context
|
||||
from extract_themes import ( # type: ignore
|
||||
from extract_themes import (
|
||||
BASE_COLORS,
|
||||
collect_theme_tags_from_constants,
|
||||
collect_theme_tags_from_tagger_source,
|
||||
|
|
@ -66,7 +66,7 @@ except ModuleNotFoundError:
|
|||
)
|
||||
|
||||
try:
|
||||
from scripts.export_themes_to_yaml import slugify as slugify_theme # type: ignore
|
||||
from scripts.export_themes_to_yaml import slugify as slugify_theme
|
||||
except Exception:
|
||||
_SLUG_RE = re.compile(r'[^a-z0-9-]')
|
||||
|
||||
|
|
@ -951,7 +951,7 @@ def main(): # pragma: no cover
|
|||
if args.schema:
|
||||
# Lazy import to avoid circular dependency: replicate minimal schema inline from models file if present
|
||||
try:
|
||||
from type_definitions_theme_catalog import ThemeCatalog # type: ignore
|
||||
from type_definitions_theme_catalog import ThemeCatalog
|
||||
import json as _json
|
||||
print(_json.dumps(ThemeCatalog.model_json_schema(), indent=2))
|
||||
return
|
||||
|
|
@ -990,8 +990,8 @@ def main(): # pragma: no cover
|
|||
# Safeguard: if catalog dir missing, attempt to auto-export Phase A YAML first
|
||||
if not CATALOG_DIR.exists(): # pragma: no cover (environmental)
|
||||
try:
|
||||
from scripts.export_themes_to_yaml import main as export_main # type: ignore
|
||||
export_main(['--force']) # type: ignore[arg-type]
|
||||
from scripts.export_themes_to_yaml import main as export_main
|
||||
export_main(['--force'])
|
||||
except Exception as _e:
|
||||
print(f"[build_theme_catalog] WARNING: catalog dir missing and auto export failed: {_e}", file=sys.stderr)
|
||||
if yaml is None:
|
||||
|
|
@ -1013,7 +1013,7 @@ def main(): # pragma: no cover
|
|||
meta_block = raw.get('metadata_info') if isinstance(raw.get('metadata_info'), dict) else {}
|
||||
# Legacy migration: if no metadata_info but legacy provenance present, adopt it
|
||||
if not meta_block and isinstance(raw.get('provenance'), dict):
|
||||
meta_block = raw.get('provenance') # type: ignore
|
||||
meta_block = raw.get('provenance')
|
||||
changed = True
|
||||
if force or not meta_block.get('last_backfill'):
|
||||
meta_block['last_backfill'] = time.strftime('%Y-%m-%dT%H:%M:%S')
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ SCRIPT_ROOT = Path(__file__).resolve().parent
|
|||
CODE_ROOT = SCRIPT_ROOT.parent
|
||||
if str(CODE_ROOT) not in sys.path:
|
||||
sys.path.insert(0, str(CODE_ROOT))
|
||||
from scripts.extract_themes import derive_synergies_for_tags # type: ignore
|
||||
from scripts.extract_themes import derive_synergies_for_tags
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[2]
|
||||
THEME_JSON = ROOT / 'config' / 'themes' / 'theme_list.json'
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@ ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
|
|||
if ROOT not in sys.path:
|
||||
sys.path.insert(0, ROOT)
|
||||
|
||||
from code.settings import CSV_DIRECTORY # type: ignore
|
||||
from code.tagging import tag_constants # type: ignore
|
||||
from code.settings import CSV_DIRECTORY
|
||||
from code.tagging import tag_constants
|
||||
|
||||
BASE_COLORS = {
|
||||
'white': 'W',
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ if str(CODE_ROOT) not in sys.path:
|
|||
sys.path.insert(0, str(CODE_ROOT))
|
||||
|
||||
try:
|
||||
from code.settings import CSV_DIRECTORY as DEFAULT_CSV_DIRECTORY # type: ignore
|
||||
from code.settings import CSV_DIRECTORY as DEFAULT_CSV_DIRECTORY
|
||||
except Exception: # pragma: no cover - fallback for adhoc execution
|
||||
DEFAULT_CSV_DIRECTORY = "csv_files"
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ def _sample_combinations(tags: List[str], iterations: int) -> List[Tuple[str | N
|
|||
|
||||
def _collect_tag_pool(df: pd.DataFrame) -> List[str]:
|
||||
tag_pool: set[str] = set()
|
||||
for tags in df.get("_ltags", []): # type: ignore[assignment]
|
||||
for tags in df.get("_ltags", []):
|
||||
if not tags:
|
||||
continue
|
||||
for token in tags:
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ def _refresh_setup() -> None:
|
|||
|
||||
def _refresh_tags() -> None:
|
||||
tagger = importlib.import_module("code.tagging.tagger")
|
||||
tagger = importlib.reload(tagger) # type: ignore[assignment]
|
||||
tagger = importlib.reload(tagger)
|
||||
for color in SUPPORTED_COLORS:
|
||||
tagger.load_dataframe(color)
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ PROJECT_ROOT = Path(__file__).resolve().parents[1]
|
|||
if str(PROJECT_ROOT) not in sys.path:
|
||||
sys.path.append(str(PROJECT_ROOT))
|
||||
|
||||
from deck_builder.random_entrypoint import ( # type: ignore # noqa: E402
|
||||
from deck_builder.random_entrypoint import ( # noqa: E402
|
||||
_build_random_theme_pool,
|
||||
_ensure_theme_tag_cache,
|
||||
_load_commanders_df,
|
||||
|
|
|
|||
|
|
@ -731,7 +731,7 @@ def main(): # pragma: no cover (script orchestration)
|
|||
if cand:
|
||||
theme_card_hits[display] = cand
|
||||
# Build global duplicate frequency map ONCE (baseline prior to this run) if threshold active
|
||||
if args.common_card_threshold > 0 and 'GLOBAL_CARD_FREQ' not in globals(): # type: ignore
|
||||
if args.common_card_threshold > 0 and 'GLOBAL_CARD_FREQ' not in globals():
|
||||
freq: Dict[str, int] = {}
|
||||
total_themes = 0
|
||||
for fp0 in CATALOG_DIR.glob('*.yml'):
|
||||
|
|
@ -748,10 +748,10 @@ def main(): # pragma: no cover (script orchestration)
|
|||
continue
|
||||
seen_local.add(c)
|
||||
freq[c] = freq.get(c, 0) + 1
|
||||
globals()['GLOBAL_CARD_FREQ'] = (freq, total_themes) # type: ignore
|
||||
globals()['GLOBAL_CARD_FREQ'] = (freq, total_themes)
|
||||
# Apply duplicate filtering to candidate lists (do NOT mutate existing example_cards)
|
||||
if args.common_card_threshold > 0 and 'GLOBAL_CARD_FREQ' in globals(): # type: ignore
|
||||
freq_map, total_prev = globals()['GLOBAL_CARD_FREQ'] # type: ignore
|
||||
if args.common_card_threshold > 0 and 'GLOBAL_CARD_FREQ' in globals():
|
||||
freq_map, total_prev = globals()['GLOBAL_CARD_FREQ']
|
||||
if total_prev > 0: # avoid div-by-zero
|
||||
cutoff = args.common_card_threshold
|
||||
def _filter(lst: List[Tuple[float, str, Set[str]]]) -> List[Tuple[float, str, Set[str]]]:
|
||||
|
|
@ -803,8 +803,8 @@ def main(): # pragma: no cover (script orchestration)
|
|||
print(f"[promote] modified {changed_count} themes")
|
||||
if args.fill_example_cards:
|
||||
print(f"[cards] modified {cards_changed} themes (target {args.cards_target})")
|
||||
if args.print_dup_metrics and 'GLOBAL_CARD_FREQ' in globals(): # type: ignore
|
||||
freq_map, total_prev = globals()['GLOBAL_CARD_FREQ'] # type: ignore
|
||||
if args.print_dup_metrics and 'GLOBAL_CARD_FREQ' in globals():
|
||||
freq_map, total_prev = globals()['GLOBAL_CARD_FREQ']
|
||||
if total_prev:
|
||||
items = sorted(freq_map.items(), key=lambda x: (-x[1], x[0]))[:30]
|
||||
print('[dup-metrics] Top shared example_cards (baseline before this run):')
|
||||
|
|
|
|||
|
|
@ -31,9 +31,9 @@ CODE_ROOT = ROOT / 'code'
|
|||
if str(CODE_ROOT) not in sys.path:
|
||||
sys.path.insert(0, str(CODE_ROOT))
|
||||
|
||||
from type_definitions_theme_catalog import ThemeCatalog, ThemeYAMLFile # type: ignore
|
||||
from scripts.extract_themes import load_whitelist_config # type: ignore
|
||||
from scripts.build_theme_catalog import build_catalog # type: ignore
|
||||
from type_definitions_theme_catalog import ThemeCatalog, ThemeYAMLFile
|
||||
from scripts.extract_themes import load_whitelist_config
|
||||
from scripts.build_theme_catalog import build_catalog
|
||||
|
||||
CATALOG_JSON = ROOT / 'config' / 'themes' / 'theme_list.json'
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue