feat: DSH编排基建首版(server/tests 88用例/P2插件/8020端口/PORT-NOTE/MOBILE_APP)
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
"""Runtime configuration, read from environment variables."""
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Config:
|
||||
data_dir: Path
|
||||
plugins_dir: Path
|
||||
database_url: str
|
||||
bootstrap_admin_token: str | None
|
||||
invite_code: str | None
|
||||
admin_username: str
|
||||
max_plugin_bytes: int
|
||||
|
||||
@classmethod
|
||||
def from_env(cls) -> "Config":
|
||||
data_dir = Path(os.environ.get("DSH_DATA_DIR", "data")).resolve()
|
||||
database_url = os.environ.get("DSH_DATABASE_URL", "").strip()
|
||||
if not database_url:
|
||||
raise RuntimeError(
|
||||
"DSH_DATABASE_URL is required, e.g. "
|
||||
"postgresql://dsh:secret@localhost:5432/dsh"
|
||||
)
|
||||
return cls(
|
||||
data_dir=data_dir,
|
||||
plugins_dir=data_dir / "plugins",
|
||||
database_url=database_url,
|
||||
bootstrap_admin_token=os.environ.get("DSH_BOOTSTRAP_ADMIN_TOKEN") or None,
|
||||
invite_code=os.environ.get("DSH_INVITE_CODE") or None,
|
||||
admin_username=os.environ.get("DSH_ADMIN_USERNAME", "admin"),
|
||||
max_plugin_bytes=int(os.environ.get("DSH_MAX_PLUGIN_MB", "20")) * 1024 * 1024,
|
||||
)
|
||||
|
||||
def ensure_dirs(self) -> None:
|
||||
self.data_dir.mkdir(parents=True, exist_ok=True)
|
||||
self.plugins_dir.mkdir(parents=True, exist_ok=True)
|
||||
Reference in New Issue
Block a user