Files
zbiorki_app/config.py
2026-03-20 10:43:40 +01:00

91 lines
3.1 KiB
Python

import os
basedir = os.path.abspath(os.path.dirname(__file__))
def _get_bool(name: str, default: bool) -> bool:
val = os.environ.get(name)
if val is None:
return default
return str(val).strip().lower() in {"1", "true", "t", "yes", "y", "on"}
def _get_str(name: str, default: str) -> str:
return os.environ.get(name, default)
def _get_int(name: str, default: int) -> int:
try:
return int(os.environ.get(name, default))
except (TypeError, ValueError):
return default
class Config:
"""
Konfiguracja aplikacji pobierana z ENV (z sensownymi domyślnymi wartościami).
Zmiennych szukamy pod nazwami:
- DATABASE_URL
- SECRET_KEY
- ALLOW_REGISTRATION
- MAIN_ADMIN_USERNAME
- MAIN_ADMIN_PASSWORD
- BLOCK_BOTS
- CACHE_CONTROL_HEADER
- PRAGMA_HEADER
- ROBOTS_TAG
"""
#SQLALCHEMY_DATABASE_URI = _get_str("DATABASE_URL", "sqlite:///baza.db")
# Flask
SECRET_KEY = _get_str("SECRET_KEY", "tajny_klucz")
# Rejestracja i konto admina
ALLOW_REGISTRATION = _get_bool("ALLOW_REGISTRATION", False)
MAIN_ADMIN_USERNAME = _get_str("MAIN_ADMIN_USERNAME", "admin")
MAIN_ADMIN_PASSWORD = _get_str("MAIN_ADMIN_PASSWORD", "admin")
# Indeksowanie / cache / robots
BLOCK_BOTS = _get_bool("BLOCK_BOTS", True)
CACHE_CONTROL_HEADER = _get_str("CACHE_CONTROL_HEADER", "max-age=600")
CACHE_CONTROL_HEADER_STATIC = _get_str("CACHE_CONTROL_HEADER_STATIC", "max-age=3600")
USE_ETAGS = _get_bool("USE_ETAGS", True)
PRAGMA_HEADER = _get_str("PRAGMA_HEADER", "")
ROBOTS_TAG = _get_str("ROBOTS_TAG", "noindex, nofollow, nosnippet, noarchive")
# (opcjonalnie) wyłącz warningi track_modifications
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ENGINE_OPTIONS = {
"pool_pre_ping": True,
"pool_recycle": _get_int("DB_POOL_RECYCLE", 300),
"pool_timeout": _get_int("DB_POOL_TIMEOUT", 30),
}
HEALTHCHECK_TOKEN = _get_str("HEALTHCHECK_TOKEN", "healthcheck")
# Baza danych
DB_ENGINE = os.environ.get("DB_ENGINE", "sqlite").lower()
if DB_ENGINE == "sqlite":
SQLALCHEMY_DATABASE_URI = f"sqlite:///{os.path.join(basedir, 'db', 'database.db')}"
elif DB_ENGINE == "pgsql":
SQLALCHEMY_DATABASE_URI = (
f"postgresql://{os.environ['DB_USER']}:{os.environ['DB_PASSWORD']}@"
f"{os.environ['DB_HOST']}:{os.environ.get('DB_PORT', 5432)}/{os.environ['DB_NAME']}"
)
SQLALCHEMY_ENGINE_OPTIONS["connect_args"] = {
"connect_timeout": _get_int("DB_CONNECT_TIMEOUT", 5),
"application_name": _get_str("DB_APPLICATION_NAME", "zbiorka-app"),
}
elif DB_ENGINE == "mysql":
SQLALCHEMY_DATABASE_URI = (
f"mysql+pymysql://{os.environ['DB_USER']}:{os.environ['DB_PASSWORD']}@"
f"{os.environ['DB_HOST']}:{os.environ.get('DB_PORT', 3306)}/{os.environ['DB_NAME']}"
)
SQLALCHEMY_ENGINE_OPTIONS["connect_args"] = {
"connect_timeout": _get_int("DB_CONNECT_TIMEOUT", 5),
}
else:
raise ValueError("Nieobsługiwany typ bazy danych.")