In pydantic_settings v2, List[str] fields are JSON-parsed by the env
source before pydantic validators run. When BACKEND_CORS_ORIGINS=""
(empty string) in Kubernetes, json.loads("") raised JSONDecodeError,
crashing alembic migrations.
Fixes:
- Add env_ignore_empty=True to class Config so pydantic_settings skips
empty-string env vars and falls back to the field default
- Update assemble_cors_origins validator to explicitly handle empty and
whitespace-only strings (returns []), JSON array strings (parsed via
json.loads), and filters empty tokens from comma-separated values
- Add backend/app/tests/test_config.py covering all CORS origins
parsing scenarios including the empty-string regression case
Agent-Logs-Url: https://github.com/christianlouis/dmarq/sessions/53bb1064-2a32-4691-8397-9d4663bc18a8
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
- Moved IMAP credentials from query parameters to the request body for the test-connection endpoint.
- Created missing `__init__.py` files across `backend/app/` to fix CI `ModuleNotFoundError`.
- Reformatted `setup.py` and `user.py` using `black` to pass lint checks.
- Addressed Pylint warnings in `imap.py` (unused arguments, lazy logging, exception chaining).
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
- Auto-format all Python files with black and isort
- Remove unused imports with autoflake
- Fix flake8 issues (missing newlines, blank lines, etc.)
- Fix nonlocal/global scope issues in main.py
- Fix security.py import order (E402)
- Remove f-string without placeholders
- Add nosec comment for intentional exception handling
- Fix test imports to match refactored DMARCParser API
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>