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

Le champ pronote_url dans PronoteSettings avec env_prefix=PRONOTE_ produisait PRONOTE_PRONOTE_URL au lieu de PRONOTE_URL. Renomme le champ en url pour que le mécanisme standard produise PRONOTE_URL. Toutes les références mises à jour dans le code de production et les tests. Décision d'architecture : renommage préféré à un contournement par alias (mypy + dette technique).

Co-authored-by: Antoine Van Elstraete <antoine@van-elstraete.net>
Co-committed-by: Antoine Van Elstraete <antoine@van-elstraete.net>
This commit was merged in pull request #4.
This commit is contained in:
2026-09-08 21:24:10 +02:00
committed by Antoine Van Elstraete
parent bf4038814a
commit 3b38253575
6 changed files with 47 additions and 34 deletions

View File

@@ -46,7 +46,7 @@ def pronote_settings() -> PronoteSettings:
:rtype: PronoteSettings
"""
return PronoteSettings(
pronote_url="https://pronote.example.com",
url="https://pronote.example.com",
username="testuser",
password=SecretStr("testpass"),
ent="bordeaux",
@@ -309,9 +309,7 @@ def test_missing_credentials_raises(empty_pronote_settings: PronoteSettings) ->
"""
client = PronoteClient(empty_pronote_settings)
with pytest.raises(
ValueError, match="pronote_url, username et password sont requis pour pronotepy"
):
with pytest.raises(ValueError, match="url, username et password sont requis pour pronotepy"):
client._connect()
@@ -384,7 +382,7 @@ def test_connect_without_ent_but_with_required_credentials(
# Settings sans ent mais avec les autres champs requis
settings = PronoteSettings(
pronote_url="https://pronote.example.com",
url="https://pronote.example.com",
username="testuser",
password=SecretStr("testpass"),
ent=None, # Explicitement None
@@ -414,7 +412,7 @@ def test_connect_without_ent_but_with_required_credentials(
def test_connect_missing_required_credentials_still_raises(
mocker: pytest_mock.MockerFixture,
) -> None:
"""Vérifie que _connect() lève ValueError si pronote_url, username ou password manquent.
"""Vérifie que _connect() lève ValueError si url, username ou password manquent.
Ce test valide que l'erreur ne mentionne plus ent comme requis.
@@ -424,9 +422,9 @@ def test_connect_missing_required_credentials_still_raises(
from pronote_sync.config.settings import PronoteSettings
from pronote_sync.sources.pronote.client import PronoteClient
# Settings avec ent mais sans pronote_url
# Settings avec ent mais sans url
settings = PronoteSettings(
pronote_url=None,
url=None,
username="testuser",
password=SecretStr("testpass"),
ent=None,
@@ -439,7 +437,7 @@ def test_connect_missing_required_credentials_still_raises(
client._connect()
# Error should NOT mention ent as required
assert "pronote_url, username et password sont requis" in str(exc_info.value)
assert "url, username et password sont requis" in str(exc_info.value)
assert "ent" not in str(exc_info.value)
@@ -453,7 +451,7 @@ def test_connect_missing_username_raises(mocker: pytest_mock.MockerFixture) -> N
from pronote_sync.sources.pronote.client import PronoteClient
settings = PronoteSettings(
pronote_url="https://pronote.example.com",
url="https://pronote.example.com",
username=None,
password=SecretStr("testpass"),
ent=None,
@@ -465,7 +463,7 @@ def test_connect_missing_username_raises(mocker: pytest_mock.MockerFixture) -> N
with pytest.raises(ValueError) as exc_info:
client._connect()
assert "pronote_url, username et password sont requis" in str(exc_info.value)
assert "url, username et password sont requis" in str(exc_info.value)
def test_connect_missing_password_raises(mocker: pytest_mock.MockerFixture) -> None:
@@ -478,7 +476,7 @@ def test_connect_missing_password_raises(mocker: pytest_mock.MockerFixture) -> N
from pronote_sync.sources.pronote.client import PronoteClient
settings = PronoteSettings(
pronote_url="https://pronote.example.com",
url="https://pronote.example.com",
username="testuser",
password=None,
ent=None,
@@ -490,7 +488,7 @@ def test_connect_missing_password_raises(mocker: pytest_mock.MockerFixture) -> N
with pytest.raises(ValueError) as exc_info:
client._connect()
assert "pronote_url, username et password sont requis" in str(exc_info.value)
assert "url, username et password sont requis" in str(exc_info.value)
def test_connect_student_account_type(
@@ -507,7 +505,7 @@ def test_connect_student_account_type(
from pronote_sync.sources.pronote.client import PronoteClient
pronote_settings_student = PronoteSettings(
pronote_url="https://pronote.example.com",
url="https://pronote.example.com",
username="testuser",
password=SecretStr("testpass"),
ent="bordeaux",
@@ -542,7 +540,7 @@ def test_connect_with_ent_resolution_still_works(
from pronote_sync.sources.pronote.client import PronoteClient
settings = PronoteSettings(
pronote_url="https://pronote.example.com",
url="https://pronote.example.com",
username="testuser",
password=SecretStr("testpass"),
ent="bordeaux", # ent est fourni