Replace all print() calls with structured logging using the Python logging module. This provides: - Named loggers per subsystem: commander_ai_lab.api, .batch, .sim, .coach, .deckgen, .collection, .scanner, .ml, .cache, .pplx - Dual output: console (StreamHandler) + rotating file (RotatingFileHandler) at logs/commander-ai-lab.log (25 MB x 5 backups = 125 MB max) - Configurable via env vars: CAL_LOG_DIR, CAL_LOG_MAX_MB, CAL_LOG_BACKUP_COUNT - --verbose / -v flag for DEBUG-level output - overnight-run.py: separate rotating log at logs/overnight-run.log (10 MB x 5) - Sub-module loggers in ml/, scanner/, deck_sources/, src/ all propagate to the root commander_ai_lab logger - Stripped redundant [TAG] prefixes from messages (logger name carries context) - Format: '2026-03-13 14:00:00 INFO [commander_ai_lab.batch] message' Files changed: lab_api.py, overnight-run.py, and 11 sub-module .py files 176 total print() calls converted (101 in lab_api.py, 76 in sub-modules)
36 lines
1.2 KiB
Python
36 lines
1.2 KiB
Python
"""
|
|
EDHREC Adapter (stub)
|
|
══════════════════════
|
|
|
|
Fetches popular/recommended cards from EDHREC for a given commander.
|
|
Currently returns a hardcoded sample for end-to-end wiring.
|
|
Real implementation will parse EDHREC commander pages.
|
|
"""
|
|
from .models import TemplateDeck, TemplateDeckCard
|
|
import logging
|
|
|
|
log = logging.getLogger("commander_ai_lab.deckgen.edhrec")
|
|
|
|
|
|
|
|
def fetch_template_decks(commander_name: str, color_identity: list, config: dict = None) -> list:
|
|
"""
|
|
Fetch recommended cards from EDHREC for the given commander.
|
|
|
|
Args:
|
|
commander_name: The commander's name
|
|
color_identity: List of color letters
|
|
config: Optional config
|
|
|
|
Returns:
|
|
List of TemplateDeck objects (currently stubbed)
|
|
"""
|
|
# STUB: Return empty list until real EDHREC integration
|
|
# When implemented, this will:
|
|
# 1. Build EDHREC URL for the commander (e.g., /commanders/korvold-fae-cursed-king)
|
|
# 2. Fetch the "Average Deck" or "Top Cards" list
|
|
# 3. Parse card names and inclusion percentages
|
|
# 4. Return as a single TemplateDeck with weighted cards
|
|
log.info(f" Stub: No recommendations for '{commander_name}' (not yet implemented)")
|
|
return []
|