Files
commander-ai-lab/routes/shared.py
T

59 lines
2.2 KiB
Python

"""
routes/shared.py
================
Single source of truth for objects that every router module needs:
- CFG / Config class
- Logging setup + named loggers
- In-memory state (active_batches, COMMANDER_META, PRECON_INDEX, AI_PROFILES)
- All Pydantic request/response models
- DB helpers (_get_db_conn, init_collection_db, COLLECTION_DB_PATH)
- Scryfall cache (_scryfall_cache, _enrich_from_scryfall, _fetch_scryfall_api)
- Utility helpers (_row_to_dict, _add_image_url, _snake_to_camel,
_classify_card_type, _detect_card_roles,
_build_collection_filters, _get_deck_or_404,
_compute_deck_analysis, _to_edhrec_slug,
_save_profile_to_dck, _parse_finish, _parse_text_line,
_parse_csv_content, _auto_infer_mapping,
get_java17, build_java_command)
- EDHREC in-memory cache helpers (_edhrec_cache_get, _edhrec_cache_set)
Import pattern in every router::
from routes.shared import (
CFG, log, active_batches, ...
)
"""
# Re-export everything from lab_api so routers can do:
# from routes.shared import CFG, log, active_batches, ...
# Without circular imports we simply import at the module level.
# lab_api.py must import routers AFTER defining these symbols.
# This file intentionally left as a thin re-export shim.
# The actual definitions live in lab_api.py until the full
# extraction migration is complete (Issues #16-#25).
#
# Once each router is extracted, the definitions will move here
# and lab_api.py will import from routes.shared instead.
from __future__ import annotations # noqa: F401 — forward refs for Pydantic
# Populated by lab_api.py at import time via _register_shared()
_registry: dict = {}
def _register_shared(**kwargs):
"""Called once by lab_api.py after all shared symbols are defined.
Makes them available to routers via get()."""
_registry.update(kwargs)
def get(name: str):
"""Retrieve a shared object by name. Raises KeyError if not registered."""
if name not in _registry:
raise KeyError(
f"routes.shared: '{name}' not registered. "
"Ensure lab_api.py called _register_shared() before including routers."
)
return _registry[name]