connect/api/api/config/default.py

81 lines
2.8 KiB
Python

import uuid
from os import environ
from functools import cached_property
from pydantic import BaseModel
from pydantic_settings import BaseSettings
class DbCredentialsSchema(BaseModel):
host: str
user: str
password: str
database: str
port: int
class DefaultSettings(BaseSettings):
ENV: str = environ.get("ENV", "local")
PATH_PREFIX: str = environ.get("PATH_PREFIX", "/api/v1")
APP_HOST: str = environ.get("APP_HOST", "http://127.0.0.1")
APP_PORT: int = int(environ.get("APP_PORT", 8000))
APP_ID: uuid.UUID = environ.get("APP_ID", uuid.uuid4())
LOGS_STORAGE_PATH: str = environ.get("LOGS_STORAGE_PATH", "storage/logs")
MYSQL_DB: str = environ.get("MYSQL_DB", "connect_test")
MYSQL_HOST: str = environ.get("MYSQL_HOST", "localhost")
MYSQL_USER: str = environ.get("MYSQL_USER", "connect")
MYSQL_PORT: int = int(environ.get("MYSQL_PORT", "3306")[-4:])
MYSQL_PASSWORD: str = environ.get("MYSQL_PASSWORD", "hackme")
CONNECTION_POOL_SIZE: int = int(environ.get("CONNECTION_POOL_SIZE", "30"))
CONNECTION_OVERFLOW: int = int(environ.get("CONNECTION_OVERFLOW", "100"))
DOMAIN: str = environ.get("DOMAIN", "localhost")
BROKER_PROTOCOL: str = environ.get("BROKER_PROTOCOL", "amqp")
BROKER_HOST: str = environ.get("BROKER_HOST", "localhost")
BROKER_USER: str = environ.get("BROKER_USER", "guest")
BROKER_PORT: int = int(environ.get("BROKER_PORT", "5672"))
BROKER_PASSWORD: str = environ.get("BROKER_PASSWORD", "guest")
BROKER_RABBITMQ_VHOST: str = environ.get("BROKER_RABBITMQ_VHOST", "")
REDIS_HOST: str = environ.get("REDIS_HOST", "localhost")
REDIS_PORT: int = int(environ.get("REDIS_PORT", "6379"))
REDIS_DB: int = int(environ.get("REDIS_DB", "0"))
REDIS_PASSWORD: str = environ.get("REDIS_PASSWORD", "hackme")
SECRET_KEY: str = environ.get("SECRET_KEY", "secret")
ALGORITHM: str = environ.get("ALGORITHM", "HS256")
ACCESS_TOKEN_EXPIRE_MINUTES: int = int(
environ.get("ACCESS_TOKEN_EXPIRE_MINUTES", 600)
)
REFRESH_TOKEN_EXPIRE_DAYS: int = int(
environ.get("REFRESH_TOKEN_EXPIRE_DAYS_LONG", 365)
)
@cached_property
def database_settings(self) -> dict:
"""Get all settings for connection with database."""
return {
"database": self.MYSQL_DB,
"user": self.MYSQL_USER,
"password": self.MYSQL_PASSWORD,
"host": self.MYSQL_HOST,
"port": self.MYSQL_PORT,
}
@cached_property
def database_uri(self) -> str:
"""Get uri for connection with database."""
uri = "mysql+aiomysql://{user}:{password}@{host}:{port}/{database}".format(
**self.database_settings,
)
print("database_uri", uri)
return uri
class Config:
# env_file = "../.env"
env_file_encoding = "utf-8"