import os from pathlib import Path BASE_DIR = Path(__file__).resolve().parent.parent def env_bool(name: str, default: bool = False) -> bool: value = os.environ.get(name) if value is None: return default return value.lower() in {"1", "true", "yes", "on"} def env_list(name: str, default: list[str]) -> list[str]: value = os.environ.get(name) if value is None: return default return [item.strip() for item in value.split(",") if item.strip()] SECRET_KEY = os.environ.get("HUB_SECRET_KEY", "local-development-only") DEBUG = env_bool("HUB_DEBUG") ALLOWED_HOSTS = env_list("HUB_ALLOWED_HOSTS", ["localhost", "127.0.0.1"]) CSRF_TRUSTED_ORIGINS = env_list("HUB_CSRF_TRUSTED_ORIGINS", []) INSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", "rest_framework", "hub_platform.health", "hub_platform.events", ] MIDDLEWARE = [ "django.middleware.security.SecurityMiddleware", "hub_platform.http.middleware.LocalCorsMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.common.CommonMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", "hub_platform.events.middleware.CorrelationIdMiddleware", ] ROOT_URLCONF = "hub_backend.urls" TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [], "APP_DIRS": True, "OPTIONS": { "context_processors": [ "django.template.context_processors.request", "django.contrib.auth.context_processors.auth", "django.contrib.messages.context_processors.messages", ], }, }, ] WSGI_APPLICATION = "hub_backend.wsgi.application" ASGI_APPLICATION = "hub_backend.asgi.application" DATABASES = { "default": { "ENGINE": "django.db.backends.postgresql", "NAME": os.environ.get("POSTGRES_DB", "edevs_hub"), "USER": os.environ.get("POSTGRES_USER", "edevs_hub"), "PASSWORD": os.environ.get("POSTGRES_PASSWORD", "edevs_hub"), "HOST": os.environ.get("POSTGRES_HOST", "postgres"), "PORT": os.environ.get("POSTGRES_PORT", "5432"), "CONN_MAX_AGE": 60, } } CACHES = { "default": { "BACKEND": "django.core.cache.backends.redis.RedisCache", "LOCATION": os.environ.get("REDIS_URL", "redis://redis:6379/0"), } } AUTH_PASSWORD_VALIDATORS = [ {"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"}, {"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator"}, {"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"}, {"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"}, ] LANGUAGE_CODE = "ru-ru" TIME_ZONE = "Europe/Moscow" USE_I18N = True USE_TZ = True STATIC_URL = "static/" DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" REST_FRAMEWORK = { "DEFAULT_RENDERER_CLASSES": ["rest_framework.renderers.JSONRenderer"], "DEFAULT_PARSER_CLASSES": ["rest_framework.parsers.JSONParser"], } CORS_ALLOWED_ORIGINS = { "http://localhost:5173", "http://localhost:5174", "http://localhost:5175", } LOGGING = { "version": 1, "disable_existing_loggers": False, "formatters": { "structured": { "format": "%(asctime)s %(levelname)s %(name)s %(message)s correlation_id=%(correlation_id)s" } }, "filters": { "correlation_id": {"()": "hub_platform.events.logging.CorrelationIdLogFilter"} }, "handlers": { "console": { "class": "logging.StreamHandler", "formatter": "structured", "filters": ["correlation_id"], } }, "root": {"handlers": ["console"], "level": "INFO"}, }