# retoor <retoor@molodetz.nl>
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]