feat: Implement environment variable fallback for configuration settings

This commit is contained in:
Your Name
2026-03-19 06:04:15 +02:00
parent 8358f4a413
commit b09fe890d8
2 changed files with 34 additions and 3 deletions

View File

@@ -15,6 +15,15 @@ def _parse_csv_env(name: str) -> tuple[str, ...]:
return tuple(item.strip().lower() for item in raw_value.split(",") if item.strip())
def _env_or_default(name: str, default: str) -> str:
raw_value = os.getenv(name)
if raw_value is None:
return default
normalized = raw_value.strip()
return normalized or default
class BaseConfig:
"""Base configuration."""
SECRET_KEY = os.getenv("SECRET_KEY", "change-me-in-production")
@@ -25,10 +34,10 @@ class BaseConfig:
MAX_CONTENT_LENGTH = int(
os.getenv("ABSOLUTE_MAX_CONTENT_LENGTH_MB", 100)
) * 1024 * 1024
UPLOAD_FOLDER = os.getenv("UPLOAD_FOLDER", "/tmp/uploads")
OUTPUT_FOLDER = os.getenv("OUTPUT_FOLDER", "/tmp/outputs")
UPLOAD_FOLDER = _env_or_default("UPLOAD_FOLDER", "/tmp/uploads")
OUTPUT_FOLDER = _env_or_default("OUTPUT_FOLDER", "/tmp/outputs")
FILE_EXPIRY_SECONDS = int(os.getenv("FILE_EXPIRY_SECONDS", 1800))
DATABASE_PATH = os.getenv(
DATABASE_PATH = _env_or_default(
"DATABASE_PATH", os.path.join(BASE_DIR, "data", "dociva.db")
)
PERMANENT_SESSION_LIFETIME = timedelta(days=30)

View File

@@ -1,4 +1,7 @@
"""Tests for GET /api/config — dynamic upload limits."""
import importlib
import os
import pytest
@@ -51,3 +54,22 @@ class TestConfigEndpoint:
data = resp.get_json()
limits = data["file_limits_mb"]
assert data["max_upload_mb"] == max(limits.values())
class TestConfigEnvironmentFallbacks:
"""Tests for environment values that should not accept blank strings."""
def test_blank_database_path_falls_back_to_default(self, monkeypatch):
"""A blank DATABASE_PATH must not create a temporary per-connection SQLite DB."""
monkeypatch.setenv("DATABASE_PATH", "")
import config as config_module
reloaded = importlib.reload(config_module)
try:
expected = os.path.join(reloaded.BASE_DIR, "data", "dociva.db")
assert reloaded.BaseConfig.DATABASE_PATH == expected
assert reloaded.ProductionConfig.DATABASE_PATH == expected
finally:
monkeypatch.delenv("DATABASE_PATH", raising=False)
importlib.reload(config_module)