81 lines
2.8 KiB
Python
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"
|