diff --git a/verdict-backend/alembic/env.py b/verdict-backend/alembic/env.py index 1d8e6cf..7616dec 100644 --- a/verdict-backend/alembic/env.py +++ b/verdict-backend/alembic/env.py @@ -7,7 +7,7 @@ import app.models # noqa: F401 # register models for autogenerate from alembic import context -from app.config import get_settings +from app.database_config import get_database_settings # this is the Alembic Config object, which provides # access to the values within the .ini file in use. @@ -38,8 +38,8 @@ def run_migrations_offline() -> None: script output. """ - settings = get_settings() - url = settings.database_url + db_settings = get_database_settings() + url = db_settings.database_url context.configure( url=url, target_metadata=target_metadata, @@ -58,9 +58,9 @@ def run_migrations_online() -> None: and associate a connection with the context. """ - settings = get_settings() + db_settings = get_database_settings() connectable = engine_from_config( - {"sqlalchemy.url": settings.database_url}, + {"sqlalchemy.url": db_settings.database_url}, prefix="sqlalchemy.", poolclass=pool.NullPool, ) diff --git a/verdict-backend/app/config.py b/verdict-backend/app/config.py index b36c2df..2e9b513 100644 --- a/verdict-backend/app/config.py +++ b/verdict-backend/app/config.py @@ -1,35 +1,14 @@ -# app/config.py from functools import lru_cache -from pydantic import Field, SecretStr -from pydantic_settings import BaseSettings, SettingsConfigDict +from pydantic import Field +from app.database_config import DatabaseSettings -class Settings(BaseSettings): - model_config = SettingsConfigDict( - env_file=".env", - env_file_encoding="utf-8", - case_sensitive=False, - extra="allow", - ) - - database_host: str = Field(default=...) - database_port: int = Field(default=...) - database_name: str = Field(default=...) - database_user: str = Field(default=...) - database_password: SecretStr = Field(default=...) +class Settings(DatabaseSettings): asset_inventory_url: str = Field(default=...) cmdb_url: str = Field(default=...) - @property - def database_url(self) -> str: - return ( - f"postgresql+psycopg2://" - f"{self.database_user}:{self.database_password.get_secret_value()}" - f"@{self.database_host}:{self.database_port}/{self.database_name}" - ) - debug: bool = False log_level: str = "info" diff --git a/verdict-backend/app/database_config.py b/verdict-backend/app/database_config.py new file mode 100644 index 0000000..dfe26f7 --- /dev/null +++ b/verdict-backend/app/database_config.py @@ -0,0 +1,32 @@ +from functools import lru_cache + +from pydantic import Field, SecretStr +from pydantic_settings import BaseSettings, SettingsConfigDict + + +class DatabaseSettings(BaseSettings): + model_config = SettingsConfigDict( + env_file=".env", + env_file_encoding="utf-8", + case_sensitive=False, + extra="allow", + ) + + database_host: str = Field(default=...) + database_port: int = Field(default=...) + database_name: str = Field(default=...) + database_user: str = Field(default=...) + database_password: SecretStr = Field(default=...) + + @property + def database_url(self) -> str: + return ( + f"postgresql+psycopg2://" + f"{self.database_user}:{self.database_password.get_secret_value()}" + f"@{self.database_host}:{self.database_port}/{self.database_name}" + ) + + +@lru_cache +def get_database_settings() -> DatabaseSettings: + return DatabaseSettings()