|
# 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] |