75 lines
2.8 KiB
Python
75 lines
2.8 KiB
Python
from pathlib import Path
|
|
import os
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
|
|
BASE_DIR = Path(__file__).resolve().parent.parent
|
|
PROJECT_ROOT = BASE_DIR.parent
|
|
ENV_FILE = BASE_DIR / ".env"
|
|
ROOT_ENV_FILE = PROJECT_ROOT / ".env"
|
|
|
|
load_dotenv(ROOT_ENV_FILE)
|
|
load_dotenv(ENV_FILE, override=True)
|
|
|
|
|
|
class Settings:
|
|
def __init__(self) -> None:
|
|
self.app_name = os.getenv("APP_NAME", "Clinica Veterinaria Formiginese API")
|
|
self.app_env = os.getenv("APP_ENV", "development")
|
|
self.app_host = os.getenv("APP_HOST", "127.0.0.1")
|
|
self.app_port = int(os.getenv("APP_PORT", "8000"))
|
|
default_sqlite_path = (PROJECT_ROOT / "data" / "clinica.db").resolve()
|
|
self.database_url = os.getenv("DATABASE_URL", f"sqlite:///{default_sqlite_path.as_posix()}")
|
|
self.smtp_host = os.getenv("SMTP_HOST", "smtp.gmail.com")
|
|
self.smtp_port = int(os.getenv("SMTP_PORT", "587"))
|
|
self.smtp_username = os.getenv("SMTP_USERNAME", "")
|
|
self.smtp_password = os.getenv("SMTP_PASSWORD", "")
|
|
self.smtp_use_tls = os.getenv("SMTP_USE_TLS", "true").lower() in {"1", "true", "yes", "on"}
|
|
self.booking_email_from = os.getenv("BOOKING_EMAIL_FROM", self.smtp_username)
|
|
self.booking_email_to = os.getenv("BOOKING_EMAIL_TO", "")
|
|
self.booking_email_subject_prefix = os.getenv(
|
|
"BOOKING_EMAIL_SUBJECT_PREFIX",
|
|
"[Clinica Veterinaria Formiginese]",
|
|
)
|
|
self.booking_form_enabled = os.getenv("BOOKING_FORM_ENABLED", "false").lower() in {
|
|
"1",
|
|
"true",
|
|
"yes",
|
|
"on",
|
|
}
|
|
self.booking_audit_log_path = os.getenv(
|
|
"BOOKING_AUDIT_LOG_PATH",
|
|
str((BASE_DIR / "logs" / "booking_audit.log").resolve()),
|
|
)
|
|
self.booking_rate_limit_window_seconds = int(os.getenv("BOOKING_RATE_LIMIT_WINDOW_SECONDS", "900"))
|
|
self.booking_rate_limit_max_requests = int(os.getenv("BOOKING_RATE_LIMIT_MAX_REQUESTS", "5"))
|
|
self.booking_captcha_ttl_seconds = int(os.getenv("BOOKING_CAPTCHA_TTL_SECONDS", "600"))
|
|
self.booking_captcha_secret = os.getenv(
|
|
"BOOKING_CAPTCHA_SECRET",
|
|
self.smtp_password or self.app_name,
|
|
)
|
|
|
|
@property
|
|
def sqlite_file_path(self) -> str | None:
|
|
sqlite_prefix = "sqlite:///"
|
|
if self.database_url.startswith(sqlite_prefix):
|
|
return self.database_url.removeprefix(sqlite_prefix)
|
|
return None
|
|
|
|
@property
|
|
def booking_mail_enabled(self) -> bool:
|
|
return all(
|
|
[
|
|
self.smtp_host,
|
|
self.smtp_port,
|
|
self.smtp_username,
|
|
self.smtp_password,
|
|
self.booking_email_from,
|
|
self.booking_email_to,
|
|
]
|
|
)
|
|
|
|
|
|
settings = Settings()
|