mirror of
https://github.com/aykhans/portfolio-blog.git
synced 2025-04-16 19:03:11 +00:00
106 lines
2.9 KiB
Python
106 lines
2.9 KiB
Python
from pathlib import Path
|
|
|
|
from pydantic_settings import BaseSettings
|
|
from pydantic import (
|
|
EmailStr,
|
|
PostgresDsn,
|
|
MongoDsn
|
|
)
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
PROJECT_NAME: str = 'FastAPI Portfolio & Blog'
|
|
|
|
# -------------------------------- Paths --------------------------------
|
|
|
|
# path to src folder
|
|
MAIN_PATH: Path = Path(__file__).resolve().parent.parent.parent
|
|
# path to app folder
|
|
APP_PATH: Path = MAIN_PATH / 'app'
|
|
# name of media folder
|
|
MEDIA_FOLDER: Path = Path('media')
|
|
# path to media folder
|
|
MEDIA_PATH: Path = MAIN_PATH / MEDIA_FOLDER
|
|
# name of static folder
|
|
STATIC_FOLDER_NAME: Path = Path('static')
|
|
# path to static folder
|
|
STATIC_FOLDER: Path = MAIN_PATH / STATIC_FOLDER_NAME
|
|
|
|
FILE_FOLDERS: dict[str, Path] = {
|
|
'post_images': Path('post_images'),
|
|
}
|
|
|
|
# ------------------------------ Paths End ------------------------------
|
|
|
|
|
|
# --------------------------------- App ---------------------------------
|
|
|
|
SECRET_KEY: str
|
|
ACCESS_TOKEN_EXPIRE_MINUTES: int = 43200 # 30 days
|
|
|
|
@property
|
|
def LOGIN_URL(self) -> str:
|
|
return self.SECRET_KEY[-10:]
|
|
|
|
# ------------------------------- App End -------------------------------
|
|
|
|
|
|
# ------------------------------ PostgreSQL ------------------------------
|
|
|
|
POSTGRES_USER: str
|
|
POSTGRES_PASSWORD: str
|
|
POSTGRES_SERVER: str
|
|
POSTGRES_PORT: int = 5432
|
|
POSTGRES_DB: str
|
|
|
|
def get_postgres_dsn(self, _async: bool = False) -> PostgresDsn:
|
|
scheme = 'postgresql+asyncpg' if _async else 'postgresql'
|
|
|
|
return PostgresDsn.build(
|
|
scheme=scheme,
|
|
username=self.POSTGRES_USER,
|
|
password=self.POSTGRES_PASSWORD,
|
|
host=self.POSTGRES_SERVER,
|
|
port=self.POSTGRES_PORT,
|
|
path=self.POSTGRES_DB
|
|
)
|
|
|
|
# ---------------------------- PostgreSQL End ----------------------------
|
|
|
|
|
|
# ------------------------------- MongoDB -------------------------------
|
|
|
|
MONGO_INITDB_ROOT_USERNAME: str
|
|
MONGO_INITDB_ROOT_PASSWORD: str
|
|
MONGO_DB_PORT: int = 27017
|
|
MONGO_DB_LOGS_NAME: str = 'logs'
|
|
MONGO_DB_DEFAULT_COLLECTION: str = 'init'
|
|
|
|
@property
|
|
def MONGO_DB_DSN(self) -> MongoDsn:
|
|
return MongoDsn.build(
|
|
scheme='mongodb',
|
|
username=self.MONGO_INITDB_ROOT_USERNAME,
|
|
password=self.MONGO_INITDB_ROOT_PASSWORD,
|
|
host='mongodb',
|
|
port=self.MONGO_DB_PORT,
|
|
)
|
|
|
|
# ----------------------------- MongoDB End -----------------------------
|
|
|
|
|
|
# -------------------------------- Email ---------------------------------
|
|
|
|
SMTP_SSL_TLS: bool = True
|
|
SMTP_PORT: int = 587
|
|
SMTP_HOST: str = "smtp.gmail.com"
|
|
SMTP_USER: EmailStr
|
|
SMTP_PASSWORD: str
|
|
|
|
EMAILS_FROM_NAME: str = PROJECT_NAME
|
|
EMAIL_RECIPIENTS: list[EmailStr] = []
|
|
|
|
# ------------------------------ Email End -------------------------------
|
|
|
|
settings = Settings()
|