* chore(api): upgrade Django 4.2 → 5.2 and bump Django ecosystem deps
Upgrade Django 4.2.30 LTS → 5.2.15 LTS and bump all Django-coupled
dependencies to versions that officially support 5.2 (DRF 3.17.1,
channels 4.3.2, django-cors-headers 4.9.0, django-filter 25.2,
django-storages 1.14.6, django-redis 7.0.0, celery 5.5.3,
django-celery-beat 2.9.0, django-celery-results 2.6.0,
drf-spectacular 0.29.0, scout-apm 3.5.3, psycopg 3.3.4,
whitenoise 6.12.0, django-debug-toolbar 6.0.0, pytest-django 4.12.0).
OpenTelemetry set, django-crum and pytz held (already 5.2-compatible).
Code changes the upgrade required:
- urls.py: gate the debug-toolbar URL include on apps.is_installed(),
since django-debug-toolbar 6.0 ships a model that errors when the app
isn't in INSTALLED_APPS (test settings run DEBUG=True but don't install it).
- migration 0122: state-only AlterField for three M2M fields using
through_fields (Django 5.1 deconstruction normalization); sqlmigrate is a
no-op, zero DB impact.
- test_authentication.py: module-level autouse cache.clear() fixture to fix
8 pre-existing throttle test-isolation failures (identical on the 4.2
baseline) so the suite is green.
Verified on python:3.12-alpine + Postgres 15.7: check clean,
makemigrations --check clean, full migrate applies, pytest 393 passed.
Adds the migration plan/audit write-up under apps/api/docs/.
* fix(api): scope auth test cache reset to throttle keys only
The module-wide _reset_auth_throttle_cache fixture called cache.clear(),
wiping the entire shared Redis cache between tests. Replace it with
targeted deletion of throttle_authentication_* keys (DRF
SimpleRateThrottle history for AuthenticationThrottle) via
cache.delete_pattern, keeping the same before/after cleanup.