From 234705d09920bbcfd4d4385adea83f410f652701 Mon Sep 17 00:00:00 2001 From: jsdio Date: Wed, 27 Sep 2023 18:01:24 +0300 Subject: [PATCH] App Settings --- src/fastapi_app/.env.example | 5 +++++ src/fastapi_app/lib/app/app.py | 8 ++++---- src/fastapi_app/lib/app/settings.py | 1 + .../lib/app/split_settings/__init__.py | 2 ++ src/fastapi_app/lib/app/split_settings/app.py | 17 +++++++++++++++++ 5 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 src/fastapi_app/lib/app/split_settings/app.py diff --git a/src/fastapi_app/.env.example b/src/fastapi_app/.env.example index 59d34a6..6917323 100644 --- a/src/fastapi_app/.env.example +++ b/src/fastapi_app/.env.example @@ -9,3 +9,8 @@ API_HOST=0.0.0.0 API_PORT=8000 JWT_SECRET_KEY=v9LctjUWwol4XbvczPiLFMDtZ8aal7mm + +APP_TITLE=FastAPI +APP_VERSION=0.1.0 +APP_DOCS_URL=/api/openapi +APP_OPENAPI_URL=/api/openapi.json diff --git a/src/fastapi_app/lib/app/app.py b/src/fastapi_app/lib/app/app.py index 7569152..eb03378 100644 --- a/src/fastapi_app/lib/app/app.py +++ b/src/fastapi_app/lib/app/app.py @@ -61,10 +61,10 @@ class Application: def create_app(self) -> fastapi.FastAPI: app = fastapi.FastAPI( - title="FastAPI", - version="0.1.0", - docs_url="/api/openapi", - openapi_url="/api/openapi.json", + title=self.settings.app.title, + version=self.settings.app.version, + docs_url=self.settings.app.docs_url, + openapi_url=self.settings.app.openapi_url, default_response_class=fastapi.responses.ORJSONResponse, lifespan=self.lifespan, ) diff --git a/src/fastapi_app/lib/app/settings.py b/src/fastapi_app/lib/app/settings.py index 060711b..9631e0f 100644 --- a/src/fastapi_app/lib/app/settings.py +++ b/src/fastapi_app/lib/app/settings.py @@ -8,6 +8,7 @@ import lib.app.split_settings as app_split_settings class Settings(pydantic_settings.BaseSettings): api: app_split_settings.ApiSettings = pydantic.Field(default_factory=lambda: app_split_settings.ApiSettings()) + app: app_split_settings.AppSettings = pydantic.Field(default_factory=lambda: app_split_settings.AppSettings()) postgres: app_split_settings.PostgresSettings = pydantic.Field( default_factory=lambda: app_split_settings.PostgresSettings() ) diff --git a/src/fastapi_app/lib/app/split_settings/__init__.py b/src/fastapi_app/lib/app/split_settings/__init__.py index 4d3b87b..793ebe0 100644 --- a/src/fastapi_app/lib/app/split_settings/__init__.py +++ b/src/fastapi_app/lib/app/split_settings/__init__.py @@ -1,10 +1,12 @@ from .api import * +from .app import * from .logger import * from .postgres import * from .project import * __all__ = [ "ApiSettings", + "AppSettings", "LoggingSettings", "PostgresSettings", "ProjectSettings", diff --git a/src/fastapi_app/lib/app/split_settings/app.py b/src/fastapi_app/lib/app/split_settings/app.py new file mode 100644 index 0000000..5d90f92 --- /dev/null +++ b/src/fastapi_app/lib/app/split_settings/app.py @@ -0,0 +1,17 @@ +import pydantic_settings + +import lib.app.split_settings.utils as app_split_settings_utils + + +class AppSettings(pydantic_settings.BaseSettings): + model_config = pydantic_settings.SettingsConfigDict( + env_file=app_split_settings_utils.ENV_PATH, + env_prefix="APP_", + env_file_encoding="utf-8", + extra="ignore", + ) + + title: str = "FastAPI" + version: str = "0.1.0" + docs_url: str = "/api/openapi" + openapi_url: str = "/api/openapi.json"