From 4ef2ce14d694bf78eee1be2cb412af1a9b032721 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Tue, 22 Jul 2025 06:06:15 +0200 Subject: [PATCH] feat: Allow setting port as PORT env var This seems important for render hosting, as described in https://render.com/docs/web-services#port-binding. --- prophet/app.py | 5 ++++- prophet/config.py | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/prophet/app.py b/prophet/app.py index 9ec67f0..7fc008b 100644 --- a/prophet/app.py +++ b/prophet/app.py @@ -8,6 +8,7 @@ from fastapi.staticfiles import StaticFiles from fastapi_utils.tasks import repeat_every from prophet import view +from prophet.config import AppConfig from prophet.domain.improvement import Improvement from prophet.domain.improvement_repo import IImprovementRepo from prophet.domain.original import Original @@ -135,7 +136,9 @@ async def fetch_update(debug_print: bool = True): def start() -> None: from uvicorn import run - run("prophet.app:app", reload=True, host="0.0.0.0") + config = AppConfig.from_env() + + run("prophet.app:app", reload=True, host="0.0.0.0", port=config.PORT) if __name__ == "__main__": diff --git a/prophet/config.py b/prophet/config.py index 7cf3de5..4d186bf 100644 --- a/prophet/config.py +++ b/prophet/config.py @@ -8,6 +8,16 @@ from dotenv import load_dotenv _ = load_dotenv() +@dataclass +class AppConfig: + PORT: int + + @classmethod + def from_env(cls) -> "AppConfig": + PORT = os.getenv("PORT", "8000") + return cls(PORT=int(PORT)) + + @dataclass class AiConfig: API_KEY: str