From b4136b6e90ab14e98f2956c337cd7c1c739401a5 Mon Sep 17 00:00:00 2001 From: Maciej Olko Date: Thu, 26 Feb 2026 00:34:15 +0100 Subject: [PATCH 1/7] Don't panic on invalid version status --- build_docs.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build_docs.py b/build_docs.py index cabfaec..97e5e68 100755 --- a/build_docs.py +++ b/build_docs.py @@ -111,11 +111,11 @@ def from_json(cls, data: dict) -> Versions: status = release["status"] status = Version.SYNONYMS.get(status, status) if status not in Version.STATUSES: - msg = ( + logging.warning( f"Saw invalid version status {status!r}, " - f"expected to be one of {permitted}." + f"expected to be one of {permitted}. Context: {release}" ) - raise ValueError(msg) + continue versions.append(Version(name=name, status=status, branch_or_tag=branch)) return cls(sorted(versions, key=Version.as_tuple)) From 4057e00349167b67954886608a068f53e66aa0f5 Mon Sep 17 00:00:00 2001 From: Maciej Olko Date: Thu, 26 Feb 2026 00:43:37 +0100 Subject: [PATCH 2/7] Update test_build_docs_versions::test_from_json... with new behavior --- tests/test_build_docs_versions.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/tests/test_build_docs_versions.py b/tests/test_build_docs_versions.py index 1d8f6dc..ddc1d10 100644 --- a/tests/test_build_docs_versions.py +++ b/tests/test_build_docs_versions.py @@ -1,5 +1,7 @@ from __future__ import annotations +import logging + import pytest from build_docs import Version, Versions @@ -57,17 +59,17 @@ def test_from_json() -> None: ] -def test_from_json_error() -> None: +def test_from_json_warning(caplog) -> None: # Arrange json_data = {"2.8": {"branch": "2.8", "pep": 404, "status": "ex-release"}} - # Act / Assert - with pytest.raises( - ValueError, - match="Saw invalid version status 'ex-release', expected to be one of", - ): + # Act + with caplog.at_level(logging.WARNING): Versions.from_json(json_data) + # Assert + assert "Saw invalid version status 'ex-release', expected to be one of" in caplog.text + def test_current_stable(versions) -> None: # Act From bb4684d622461e7340683c2838dc0599a5d832e7 Mon Sep 17 00:00:00 2001 From: Maciej Olko Date: Thu, 26 Feb 2026 00:46:32 +0100 Subject: [PATCH 3/7] Reformat --- tests/test_build_docs_versions.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/test_build_docs_versions.py b/tests/test_build_docs_versions.py index ddc1d10..e1a7696 100644 --- a/tests/test_build_docs_versions.py +++ b/tests/test_build_docs_versions.py @@ -68,7 +68,9 @@ def test_from_json_warning(caplog) -> None: Versions.from_json(json_data) # Assert - assert "Saw invalid version status 'ex-release', expected to be one of" in caplog.text + assert ( + "Saw invalid version status 'ex-release', expected to be one of" in caplog.text + ) def test_current_stable(versions) -> None: From cad952274a5da6a9c880d62077370a1f92130dc0 Mon Sep 17 00:00:00 2001 From: Maciej Olko Date: Thu, 26 Feb 2026 00:56:20 +0100 Subject: [PATCH 4/7] Pass values as arguments to the logging method to defer string formatting until required --- build_docs.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/build_docs.py b/build_docs.py index 97e5e68..2473fd7 100755 --- a/build_docs.py +++ b/build_docs.py @@ -112,8 +112,10 @@ def from_json(cls, data: dict) -> Versions: status = Version.SYNONYMS.get(status, status) if status not in Version.STATUSES: logging.warning( - f"Saw invalid version status {status!r}, " - f"expected to be one of {permitted}. Context: {release}" + "Saw invalid version status %r, expected to be one of %s. Context: %s", + status, + permitted, + release, ) continue versions.append(Version(name=name, status=status, branch_or_tag=branch)) From bc74b1338b892f39031e1d3e0162df86d9f88b3c Mon Sep 17 00:00:00 2001 From: Maciej Olko Date: Thu, 26 Feb 2026 14:15:06 +0100 Subject: [PATCH 5/7] Apply suggestions from code review Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> --- tests/test_build_docs_versions.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/tests/test_build_docs_versions.py b/tests/test_build_docs_versions.py index e1a7696..7d5ede8 100644 --- a/tests/test_build_docs_versions.py +++ b/tests/test_build_docs_versions.py @@ -61,16 +61,26 @@ def test_from_json() -> None: def test_from_json_warning(caplog) -> None: # Arrange - json_data = {"2.8": {"branch": "2.8", "pep": 404, "status": "ex-release"}} + json_data = { + "2.8": {"branch": "2.8", "pep": 404, "status": "ex-release"}, + "3.16": { + "branch": "", + "pep": 826, + "status": "", + "first_release": "2027-10-06", + "end_of_life": "2032-10", + "release_manager": "Savannah Ostrowski", + }, + } # Act with caplog.at_level(logging.WARNING): Versions.from_json(json_data) - # Assert - assert ( - "Saw invalid version status 'ex-release', expected to be one of" in caplog.text - ) + # Assert: both should be skipped + assert versions == [] + assert "Saw invalid version status 'ex-release'" in caplog.text + assert "Saw invalid version status ''" in caplog.text def test_current_stable(versions) -> None: From 93eaf545686d441fb5383cc112138502f7c64643 Mon Sep 17 00:00:00 2001 From: Maciej Olko Date: Thu, 26 Feb 2026 14:16:39 +0100 Subject: [PATCH 6/7] Store result of from_json in versions variable --- tests/test_build_docs_versions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_build_docs_versions.py b/tests/test_build_docs_versions.py index 7d5ede8..cfcdf8e 100644 --- a/tests/test_build_docs_versions.py +++ b/tests/test_build_docs_versions.py @@ -75,7 +75,7 @@ def test_from_json_warning(caplog) -> None: # Act with caplog.at_level(logging.WARNING): - Versions.from_json(json_data) + versions = Versions.from_json(json_data) # Assert: both should be skipped assert versions == [] From 9915f9d9012751d9bc5881ecbf5e79ec79cf0c4e Mon Sep 17 00:00:00 2001 From: Maciej Olko Date: Thu, 26 Feb 2026 14:19:49 +0100 Subject: [PATCH 7/7] Update tests/test_build_docs_versions.py Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> --- tests/test_build_docs_versions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_build_docs_versions.py b/tests/test_build_docs_versions.py index cfcdf8e..8e7e230 100644 --- a/tests/test_build_docs_versions.py +++ b/tests/test_build_docs_versions.py @@ -75,7 +75,7 @@ def test_from_json_warning(caplog) -> None: # Act with caplog.at_level(logging.WARNING): - versions = Versions.from_json(json_data) + versions = list(Versions.from_json(json_data)) # Assert: both should be skipped assert versions == []