mirror of
https://github.com/ijaric/voice_assistant.git
synced 2025-05-24 22:43:26 +00:00
Настройки
This commit is contained in:
parent
ed9a93a04f
commit
0cc0b7f0bc
|
@ -1,10 +1,11 @@
|
||||||
DB_HOST=db
|
POSTGRES_HOST=db
|
||||||
DB_PORT=5432
|
POSTGRES_PORT=5432
|
||||||
DB_USER=user
|
POSTGRES_USER=user
|
||||||
DB_PASSWORD=Qwe123
|
POSTGRES_PASSWORD=Qwe123
|
||||||
DB_NAME=api_db
|
POSTGRES_NAME=api_db
|
||||||
|
|
||||||
SERVER_HOST=0.0.0.0
|
NGINX_PORT=80
|
||||||
SERVER_PORT=8000
|
API_HOST=0.0.0.0
|
||||||
|
API_PORT=8000
|
||||||
|
|
||||||
JWT_SECRET_KEY=v9LctjUWwol4XbvczPiLFMDtZ8aal7mm
|
JWT_SECRET_KEY=v9LctjUWwol4XbvczPiLFMDtZ8aal7mm
|
||||||
|
|
|
@ -4,9 +4,9 @@ import logging.config as logging_config
|
||||||
import fastapi
|
import fastapi
|
||||||
|
|
||||||
import lib.api.v1.endpoints as api_v1_endpoints
|
import lib.api.v1.endpoints as api_v1_endpoints
|
||||||
|
import lib.app.settings as app_settings
|
||||||
|
|
||||||
from .logger import LOGGING
|
from .logger import LOGGING
|
||||||
from .settings import get_settings
|
|
||||||
|
|
||||||
logging_config.dictConfig(LOGGING)
|
logging_config.dictConfig(LOGGING)
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
@ -14,7 +14,7 @@ logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class Application:
|
class Application:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self.settings = get_settings()
|
self.settings = app_settings.settings
|
||||||
self.logger = logging.getLogger(__name__)
|
self.logger = logging.getLogger(__name__)
|
||||||
self.producer = None
|
self.producer = None
|
||||||
|
|
||||||
|
|
|
@ -1,35 +1,26 @@
|
||||||
import functools
|
import logging.config as logging_config
|
||||||
|
|
||||||
import pydantic
|
import pydantic
|
||||||
import pydantic_settings
|
import pydantic_settings
|
||||||
|
|
||||||
|
import lib.app.split_settings as app_split_settings
|
||||||
class DbSettings(pydantic_settings.BaseSettings):
|
|
||||||
host: str = pydantic.Field("127.0.0.1", validation_alias="db_host")
|
|
||||||
port: int = pydantic.Field(5432, validation_alias="db_port")
|
|
||||||
user: str = pydantic.Field(..., validation_alias="db_user")
|
|
||||||
password: str = pydantic.Field(..., validation_alias="db_password")
|
|
||||||
name: str = pydantic.Field("db_name", validation_alias="db_name")
|
|
||||||
|
|
||||||
|
|
||||||
class ApiSettings(pydantic_settings.BaseSettings):
|
|
||||||
host: str = pydantic.Field("0.0.0.0", validation_alias="server_host")
|
|
||||||
port: int = pydantic.Field(8000, validation_alias="server_port")
|
|
||||||
|
|
||||||
|
|
||||||
class Settings(pydantic_settings.BaseSettings):
|
class Settings(pydantic_settings.BaseSettings):
|
||||||
debug: str = pydantic.Field("false", validation_alias="debug")
|
api: app_split_settings.ApiSettings = pydantic.Field(default_factory=lambda: app_split_settings.ApiSettings())
|
||||||
db: DbSettings = pydantic.Field(default_factory=lambda: DbSettings())
|
postgres: app_split_settings.PostgresSettings = pydantic.Field(
|
||||||
api: ApiSettings = pydantic.Field(default_factory=lambda: ApiSettings())
|
default_factory=lambda: app_split_settings.PostgresSettings()
|
||||||
|
)
|
||||||
jwt_secret_key: str = pydantic.Field(..., validation_alias="jwt_secret_key")
|
logger: app_split_settings.LoggingSettings = pydantic.Field(
|
||||||
|
default_factory=lambda: app_split_settings.LoggingSettings()
|
||||||
@pydantic.field_validator("debug")
|
)
|
||||||
@classmethod
|
project: app_split_settings.ProjectSettings = pydantic.Field(
|
||||||
def validate_debug(cls, v: str) -> bool:
|
default_factory=lambda: app_split_settings.ProjectSettings()
|
||||||
return v.lower() == "true"
|
)
|
||||||
|
|
||||||
|
|
||||||
@functools.lru_cache
|
settings = Settings() # todo Вынести в инициализацию
|
||||||
def get_settings() -> Settings:
|
|
||||||
return Settings()
|
logging_config.dictConfig(
|
||||||
|
app_split_settings.get_logging_config(**settings.logger.model_dump())
|
||||||
|
)
|
||||||
|
|
12
src/fastapi_app/lib/app/split_settings/__init__.py
Normal file
12
src/fastapi_app/lib/app/split_settings/__init__.py
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
from .api import *
|
||||||
|
from .logger import *
|
||||||
|
from .postgres import *
|
||||||
|
from .project import *
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
"ApiSettings",
|
||||||
|
"LoggingSettings",
|
||||||
|
"PostgresSettings",
|
||||||
|
"ProjectSettings",
|
||||||
|
"get_logging_config",
|
||||||
|
]
|
15
src/fastapi_app/lib/app/split_settings/api.py
Normal file
15
src/fastapi_app/lib/app/split_settings/api.py
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
import pydantic_settings
|
||||||
|
|
||||||
|
import lib.app.split_settings.utils as app_split_settings_utils
|
||||||
|
|
||||||
|
|
||||||
|
class ApiSettings(pydantic_settings.BaseSettings):
|
||||||
|
model_config = pydantic_settings.SettingsConfigDict(
|
||||||
|
env_file=app_split_settings_utils.ENV_PATH,
|
||||||
|
env_prefix="API_",
|
||||||
|
env_file_encoding="utf-8",
|
||||||
|
extra="ignore",
|
||||||
|
)
|
||||||
|
|
||||||
|
host: str = "0.0.0.0"
|
||||||
|
port: int = 8000
|
79
src/fastapi_app/lib/app/split_settings/logger.py
Normal file
79
src/fastapi_app/lib/app/split_settings/logger.py
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
import pydantic_settings
|
||||||
|
|
||||||
|
import lib.app.split_settings.utils as app_split_settings_utils
|
||||||
|
|
||||||
|
|
||||||
|
class LoggingSettings(pydantic_settings.BaseSettings):
|
||||||
|
model_config = pydantic_settings.SettingsConfigDict(
|
||||||
|
env_file=app_split_settings_utils.ENV_PATH, env_file_encoding="utf-8", extra="ignore"
|
||||||
|
)
|
||||||
|
|
||||||
|
log_format: str = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
||||||
|
log_default_endpoints: list[str] = [
|
||||||
|
"console",
|
||||||
|
]
|
||||||
|
|
||||||
|
log_level_endpoints: str = "INFO"
|
||||||
|
log_level_loggers: str = "INFO"
|
||||||
|
log_level_root: str = "INFO"
|
||||||
|
|
||||||
|
|
||||||
|
def get_logging_config(
|
||||||
|
log_format: str,
|
||||||
|
log_default_endpoints: list[str],
|
||||||
|
log_level_endpoints: str,
|
||||||
|
log_level_loggers: str,
|
||||||
|
log_level_root: str,
|
||||||
|
):
|
||||||
|
return {
|
||||||
|
"version": 1,
|
||||||
|
"disable_existing_loggers": False,
|
||||||
|
"formatters": {
|
||||||
|
"verbose": {"format": log_format},
|
||||||
|
"default": {
|
||||||
|
"()": "uvicorn.logging.DefaultFormatter",
|
||||||
|
"fmt": "%(levelprefix)s %(message)s",
|
||||||
|
"use_colors": None,
|
||||||
|
},
|
||||||
|
"access": {
|
||||||
|
"()": "uvicorn.logging.AccessFormatter",
|
||||||
|
"fmt": "%(levelprefix)s %(client_addr)s - '%(request_line)s' %(status_code)s",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"endpoints": {
|
||||||
|
"console": {
|
||||||
|
"level": log_level_endpoints,
|
||||||
|
"class": "logging.StreamHandler",
|
||||||
|
"formatter": "verbose",
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"formatter": "default",
|
||||||
|
"class": "logging.StreamHandler",
|
||||||
|
"stream": "ext://sys.stdout",
|
||||||
|
},
|
||||||
|
"access": {
|
||||||
|
"formatter": "access",
|
||||||
|
"class": "logging.StreamHandler",
|
||||||
|
"stream": "ext://sys.stdout",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"loggers": {
|
||||||
|
"": {
|
||||||
|
"endpoints": log_default_endpoints,
|
||||||
|
"level": log_level_loggers,
|
||||||
|
},
|
||||||
|
"uvicorn.error": {
|
||||||
|
"level": log_level_loggers,
|
||||||
|
},
|
||||||
|
"uvicorn.access": {
|
||||||
|
"endpoints": ["access"],
|
||||||
|
"level": log_level_loggers,
|
||||||
|
"propagate": False,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"level": log_level_root,
|
||||||
|
"formatter": "verbose",
|
||||||
|
"endpoints": log_default_endpoints,
|
||||||
|
},
|
||||||
|
}
|
21
src/fastapi_app/lib/app/split_settings/postgres.py
Normal file
21
src/fastapi_app/lib/app/split_settings/postgres.py
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
import pydantic
|
||||||
|
import pydantic_settings
|
||||||
|
|
||||||
|
import lib.app.split_settings.utils as app_split_settings_utils
|
||||||
|
|
||||||
|
|
||||||
|
class PostgresSettings(pydantic_settings.BaseSettings):
|
||||||
|
model_config = pydantic_settings.SettingsConfigDict(
|
||||||
|
env_file=app_split_settings_utils.ENV_PATH,
|
||||||
|
env_prefix="POSTGRES_",
|
||||||
|
env_file_encoding="utf-8",
|
||||||
|
extra="ignore",
|
||||||
|
)
|
||||||
|
|
||||||
|
name: str = "database_name"
|
||||||
|
host: str = "localhost"
|
||||||
|
port: int = 5432
|
||||||
|
user: str = "app"
|
||||||
|
password: pydantic.SecretStr = pydantic.Field(
|
||||||
|
default=..., validation_alias=pydantic.AliasChoices("password", "postgres_password")
|
||||||
|
)
|
19
src/fastapi_app/lib/app/split_settings/project.py
Normal file
19
src/fastapi_app/lib/app/split_settings/project.py
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
import pydantic
|
||||||
|
import pydantic_settings
|
||||||
|
|
||||||
|
import lib.app.split_settings.utils as app_split_settings_utils
|
||||||
|
|
||||||
|
|
||||||
|
class ProjectSettings(pydantic_settings.BaseSettings):
|
||||||
|
model_config = pydantic_settings.SettingsConfigDict(
|
||||||
|
env_file=app_split_settings_utils.ENV_PATH,
|
||||||
|
env_file_encoding="utf-8",
|
||||||
|
extra="ignore",
|
||||||
|
)
|
||||||
|
|
||||||
|
debug: str = "false"
|
||||||
|
jwt_secret_key: pydantic.SecretStr = pydantic.Field(default=..., validation_alias="jwt_secret_key")
|
||||||
|
|
||||||
|
@pydantic.field_validator("debug")
|
||||||
|
def validate_debug(cls, v: str) -> bool:
|
||||||
|
return v.lower() == "true"
|
4
src/fastapi_app/lib/app/split_settings/utils.py
Normal file
4
src/fastapi_app/lib/app/split_settings/utils.py
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
import pathlib
|
||||||
|
|
||||||
|
BASE_PATH = pathlib.Path(__file__).parent.parent.parent.parent.resolve()
|
||||||
|
ENV_PATH = BASE_PATH / ".env"
|
Loading…
Reference in New Issue
Block a user