fix: PRONOTE_URL ignoré à cause du double préfixe env_prefix #4

Merged
AntoineVe merged 1 commits from fix/pronote-url-env-mapping into main 2026-09-08 21:24:11 +02:00
Owner

Résumé

PRONOTE_URL était ignoré par PronoteSettings à cause d'un double préfixe : env_prefix="PRONOTE_" + champ pronote_url produisait la variable PRONOTE_PRONOTE_URL au lieu de PRONOTE_URL. La variable documentée dans .env.example et tous les guides n'était donc jamais chargée.

Cause racine

Le champ pronote_url dans PronoteSettings est redondant avec le préfixe PRONOTE_. Avec env_prefix="PRONOTE_" :

  • ical_urlPRONOTE_ICAL_URL
  • usernamePRONOTE_USERNAME
  • pronote_urlPRONOTE_PRONOTE_URL (double préfixe)

Correction

Renommage du champ pronote_urlurl dans PronoteSettings. Le mécanisme standard env_prefix + nom de champ produit alors PRONOTE_URL sans aucune indirection. Toutes les références settings.pronote.pronote_url sont mises à jour vers settings.pronote.url.

Cette approche a été arbitrée par @architect comme préférable à un contournement par validation_alias (qui introduisait 8 erreurs mypy et maintenait une variable PRONOTE_PRONOTE_URL non documentée).

Changements

Production

  • pronote_sync/config/settings.py — champ pronote_urlurl, retrait du contournement AliasChoices/populate_by_name
  • pronote_sync/sources/pronote/client.pyself._settings.pronote_urlself._settings.url
  • pronote_sync/sources/pronote/fallback.pypronote.pronote_urlpronote.url

Tests

  • tests/unit/test_config.py — test de régression PRONOTE_URLsettings.pronote.url
  • tests/unit/test_fallback.py — constructions et assertions mises à jour
  • tests/unit/test_pronote_client.py — constructions et assertions mises à jour

Validation

  • ruff check + ruff format --check : passés
  • mypy . : 0 erreur, 0 type: ignore ajouté
  • bandit : 0 finding
  • pytest --cov : 647 passed, 95.67% de couverture
  • pre-commit : tous les hooks passent
  • Revue @reviewer : APPROVED
  • Mapping runtime : PRONOTE_URLsettings.pronote.url vérifié
  • Validation en environnement réel en attente — pas de tag/release avant confirmation sur le serveur de prod.
## Résumé `PRONOTE_URL` était ignoré par `PronoteSettings` à cause d'un double préfixe : `env_prefix="PRONOTE_"` + champ `pronote_url` produisait la variable `PRONOTE_PRONOTE_URL` au lieu de `PRONOTE_URL`. La variable documentée dans `.env.example` et tous les guides n'était donc jamais chargée. ## Cause racine Le champ `pronote_url` dans `PronoteSettings` est redondant avec le préfixe `PRONOTE_`. Avec `env_prefix="PRONOTE_"` : - `ical_url` → `PRONOTE_ICAL_URL` ✅ - `username` → `PRONOTE_USERNAME` ✅ - `pronote_url` → `PRONOTE_PRONOTE_URL` ❌ (double préfixe) ## Correction Renommage du champ `pronote_url` → `url` dans `PronoteSettings`. Le mécanisme standard `env_prefix + nom de champ` produit alors `PRONOTE_URL` sans aucune indirection. Toutes les références `settings.pronote.pronote_url` sont mises à jour vers `settings.pronote.url`. Cette approche a été arbitrée par @architect comme préférable à un contournement par `validation_alias` (qui introduisait 8 erreurs mypy et maintenait une variable `PRONOTE_PRONOTE_URL` non documentée). ## Changements ### Production - `pronote_sync/config/settings.py` — champ `pronote_url` → `url`, retrait du contournement `AliasChoices`/`populate_by_name` - `pronote_sync/sources/pronote/client.py` — `self._settings.pronote_url` → `self._settings.url` - `pronote_sync/sources/pronote/fallback.py` — `pronote.pronote_url` → `pronote.url` ### Tests - `tests/unit/test_config.py` — test de régression `PRONOTE_URL` → `settings.pronote.url` - `tests/unit/test_fallback.py` — constructions et assertions mises à jour - `tests/unit/test_pronote_client.py` — constructions et assertions mises à jour ## Validation - ✅ `ruff check` + `ruff format --check` : passés - ✅ `mypy .` : 0 erreur, 0 `type: ignore` ajouté - ✅ `bandit` : 0 finding - ✅ `pytest --cov` : 647 passed, 95.67% de couverture - ✅ `pre-commit` : tous les hooks passent - ✅ Revue @reviewer : APPROVED - ✅ Mapping runtime : `PRONOTE_URL` → `settings.pronote.url` vérifié - ⏳ **Validation en environnement réel en attente** — pas de tag/release avant confirmation sur le serveur de prod.
AntoineVe added 1 commit 2026-09-08 21:24:05 +02:00
Le champ pronote_url dans PronoteSettings avec env_prefix=PRONOTE_
produisait PRONOTE_PRONOTE_URL au lieu de PRONOTE_URL. La variable
documentée dans .env.example et tous les guides était donc ignorée.

Renomme le champ pronote_url → url pour que le mécanisme standard
env_prefix + nom de champ produise PRONOTE_URL. Toutes les références
au champ settings.pronote.pronote_url sont mises à jour vers
settings.pronote.url dans le code de production et les tests.

Changements :
- settings.py : champ pronote_url → url, retrait du contournement alias
- client.py : self._settings.pronote_url → self._settings.url
- fallback.py : pronote.pronote_url → pronote.url
- tests : mises à jour des constructions et assertions, test de
  régression pour le mapping PRONOTE_URL → url

Co-authored-by: opencode/coder litellm/coder@agents.invalid
Co-authored-by: opencode/test-engineer litellm/test-engineer@agents.invalid
AntoineVe merged commit 3b38253575 into main 2026-09-08 21:24:11 +02:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: AntoineVe/college-infos#4