Spaces:
Runtime error
Runtime error
Update app/config.py
Browse files- app/config.py +34 -9
app/config.py
CHANGED
|
@@ -1,11 +1,16 @@
|
|
| 1 |
-
from pydantic_settings import BaseSettings
|
| 2 |
-
from pydantic import Field
|
| 3 |
-
import os
|
| 4 |
|
| 5 |
class Settings(BaseSettings):
|
|
|
|
|
|
|
| 6 |
app_name: str = "GrowthOps OS"
|
| 7 |
environment: str = "prod"
|
| 8 |
-
|
|
|
|
|
|
|
|
|
|
| 9 |
port: int = int(os.getenv("PORT", "7860"))
|
| 10 |
|
| 11 |
use_internal_postgres: bool = Field(default=False, alias="USE_INTERNAL_POSTGRES")
|
|
@@ -13,14 +18,34 @@ class Settings(BaseSettings):
|
|
| 13 |
postgres_password: str = Field(default="app", alias="POSTGRES_PASSWORD")
|
| 14 |
postgres_db: str = Field(default="growthops", alias="POSTGRES_DB")
|
| 15 |
|
| 16 |
-
redis_url: str = "redis://127.0.0.1:6379/0"
|
| 17 |
otlp_endpoint: str | None = Field(default=None, alias="OTLP_ENDPOINT")
|
| 18 |
|
| 19 |
-
|
| 20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
|
| 22 |
def build_database_url(settings: Settings) -> str:
|
| 23 |
if settings.use_internal_postgres:
|
| 24 |
-
return
|
| 25 |
-
|
|
|
|
|
|
|
|
|
|
| 26 |
return "sqlite+pysqlite:////data/growthops.sqlite3"
|
|
|
|
| 1 |
+
from pydantic_settings import BaseSettings, SettingsConfigDict
|
| 2 |
+
from pydantic import Field, model_validator
|
| 3 |
+
import os, secrets, pathlib
|
| 4 |
|
| 5 |
class Settings(BaseSettings):
|
| 6 |
+
model_config = SettingsConfigDict(extra='ignore', env_prefix='', case_sensitive=True)
|
| 7 |
+
|
| 8 |
app_name: str = "GrowthOps OS"
|
| 9 |
environment: str = "prod"
|
| 10 |
+
|
| 11 |
+
# 未設定でも起動できるように None を許容し、後段で生成する
|
| 12 |
+
jwt_secret: str | None = Field(default=None, alias="JWT_SECRET")
|
| 13 |
+
|
| 14 |
port: int = int(os.getenv("PORT", "7860"))
|
| 15 |
|
| 16 |
use_internal_postgres: bool = Field(default=False, alias="USE_INTERNAL_POSTGRES")
|
|
|
|
| 18 |
postgres_password: str = Field(default="app", alias="POSTGRES_PASSWORD")
|
| 19 |
postgres_db: str = Field(default="growthops", alias="POSTGRES_DB")
|
| 20 |
|
| 21 |
+
redis_url: str = Field(default="redis://127.0.0.1:6379/0", alias="REDIS_URL")
|
| 22 |
otlp_endpoint: str | None = Field(default=None, alias="OTLP_ENDPOINT")
|
| 23 |
|
| 24 |
+
@model_validator(mode="after")
|
| 25 |
+
def _ensure_jwt_secret(self):
|
| 26 |
+
# 1) 環境変数があればそれを使う
|
| 27 |
+
if self.jwt_secret:
|
| 28 |
+
return self
|
| 29 |
+
# 2) 永続ファイルがあればそれを使う
|
| 30 |
+
path = pathlib.Path("/data/jwt_secret")
|
| 31 |
+
if path.exists():
|
| 32 |
+
self.jwt_secret = path.read_text().strip()
|
| 33 |
+
return self
|
| 34 |
+
# 3) 何も無ければ生成して永続化
|
| 35 |
+
secret = secrets.token_urlsafe(48)
|
| 36 |
+
try:
|
| 37 |
+
path.write_text(secret)
|
| 38 |
+
except Exception:
|
| 39 |
+
# 書けなくても起動は継続(再起動時に別の鍵になる点に注意)
|
| 40 |
+
pass
|
| 41 |
+
self.jwt_secret = secret
|
| 42 |
+
return self
|
| 43 |
|
| 44 |
def build_database_url(settings: Settings) -> str:
|
| 45 |
if settings.use_internal_postgres:
|
| 46 |
+
return (
|
| 47 |
+
f"postgresql+psycopg2://{settings.postgres_user}:"
|
| 48 |
+
f"{settings.postgres_password}@127.0.0.1:5432/{settings.postgres_db}"
|
| 49 |
+
)
|
| 50 |
+
# デフォルトは /data の SQLite(HF の Persistent storage 上)
|
| 51 |
return "sqlite+pysqlite:////data/growthops.sqlite3"
|