# retoor from __future__ import annotations import os from pathlib import Path from devplacepy_services.base.manifest import ( FORBIDDEN_GAPS, PORT_HINTS, SERVICE_URL_ENV, SERVICES, build_profiles, ) PROFILES = build_profiles() _BROKER_URL_ENV = { "main": "DEVPLACE_DB_SERVICE_URL", "devii_tasks": "DEVPLACE_DEVII_TASKS_STORE_URL", "devii_lessons": "DEVPLACE_DEVII_LESSONS_STORE_URL", } def port_profile() -> str: return os.environ.get("DEVPLACE_PORT_PROFILE", "micro-dev") def data_dir() -> Path: root = Path(__file__).resolve().parents[2] return Path(os.environ.get("DEVPLACE_DATA_DIR", str(root / "data"))) def service_url(name: str) -> str: env_key = SERVICE_URL_ENV.get(name) if env_key: override = os.environ.get(env_key, "").strip().rstrip("/") if override: return override profile = port_profile() host = os.environ.get("DEVPLACE_SERVICE_HOST", "127.0.0.1") port = PROFILES[profile][name] return f"http://{host}:{port}" def broker_url(name: str) -> str: env_key = _BROKER_URL_ENV.get(name) if env_key: override = os.environ.get(env_key, "").strip().rstrip("/") if override: return override if name == "main": return service_url("database") if name == "devii_tasks": return f"{service_url('devii')}/internal/store/devii_tasks" if name == "devii_lessons": return f"{service_url('devii')}/internal/store/devii_lessons" raise KeyError(name) def sqlite_read_pool_size() -> int: raw = os.environ.get("DEVPLACE_SQLITE_READ_POOL", "8").strip() try: return max(1, int(raw)) except ValueError: return 8 def service_spec(name: str): return SERVICES[name]