Skip to content
This repository was archived by the owner on Feb 23, 2026. It is now read-only.

Commit e24c13d

Browse files
committed
fix: exapnd VersionInfo with version field; clarify fake dates
1 parent 21c9aec commit e24c13d

1 file changed

Lines changed: 29 additions & 14 deletions

File tree

google/api_core/_python_version_support.py

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class PythonVersionStatus(enum.Enum):
3535
class VersionInfo(NamedTuple):
3636
"""Hold release and support date information for a Python version."""
3737

38+
version: str
3839
python_beta: Optional[datetime.date]
3940
python_start: datetime.date
4041
python_eol: datetime.date
@@ -44,55 +45,67 @@ class VersionInfo(NamedTuple):
4445
dep_unpatchable_cve: Optional[datetime.date] = None # unused
4546

4647

47-
PYTHON_VERSION_INFO: Dict[Tuple[int, int], VersionInfo] = {
48+
PYTHON_VERSIONS: list[VersionInfo] = [
4849
# Refer to https://devguide.python.org/versions/ and the PEPs linked therefrom.
49-
(3, 7): VersionInfo(
50+
VersionInfo(
51+
version="3.7",
5052
python_beta=None,
5153
python_start=datetime.date(2018, 6, 27),
5254
python_eol=datetime.date(2023, 6, 27),
5355
),
54-
(3, 8): VersionInfo(
56+
VersionInfo(
57+
version="3.8",
5558
python_beta=None,
5659
python_start=datetime.date(2019, 10, 14),
5760
python_eol=datetime.date(2024, 10, 7),
5861
),
59-
(3, 9): VersionInfo(
62+
VersionInfo(
63+
version="3.9",
6064
python_beta=datetime.date(2020, 5, 18),
6165
python_start=datetime.date(2020, 10, 5),
62-
python_eol=datetime.date(2025, 10, 5), # TODO: specify day when announced
63-
gapic_end=datetime.date(2025, 10, 5)
64-
+ datetime.timedelta(days=90), # TODO: specify day when announced
66+
python_eol=datetime.date(2025, 10, 5),
67+
gapic_end=datetime.date(2025, 10, 5) + datetime.timedelta(days=90),
6568
),
66-
(3, 10): VersionInfo(
69+
VersionInfo(
70+
version="3.10",
6771
python_beta=datetime.date(2021, 5, 3),
6872
python_start=datetime.date(2021, 10, 4),
6973
python_eol=datetime.date(2026, 10, 4), # TODO: specify day when announced
7074
),
71-
(3, 11): VersionInfo(
75+
VersionInfo(
76+
version="3.11",
7277
python_beta=datetime.date(2022, 5, 8),
7378
python_start=datetime.date(2022, 10, 24),
7479
python_eol=datetime.date(2027, 10, 24), # TODO: specify day when announced
7580
),
76-
(3, 12): VersionInfo(
81+
VersionInfo(
82+
version="3.12",
7783
python_beta=datetime.date(2023, 5, 22),
7884
python_start=datetime.date(2023, 10, 2),
7985
python_eol=datetime.date(2028, 10, 2), # TODO: specify day when announced
8086
),
81-
(3, 13): VersionInfo(
87+
VersionInfo(
88+
version="3.13",
8289
python_beta=datetime.date(2024, 5, 8),
8390
python_start=datetime.date(2024, 10, 7),
8491
python_eol=datetime.date(2029, 10, 7), # TODO: specify day when announced
8592
),
86-
(3, 14): VersionInfo(
93+
VersionInfo(
94+
version="3.14",
8795
python_beta=datetime.date(2025, 5, 7),
8896
python_start=datetime.date(2025, 10, 7),
8997
python_eol=datetime.date(2030, 10, 7), # TODO: specify day when announced
9098
),
99+
]
100+
101+
PYTHON_VERSION_INFO: Dict[Tuple[int, int], VersionInfo] = {
102+
tuple(map(int, info.version.split("."))): info for info in PYTHON_VERSIONS
91103
}
92104

105+
93106
LOWEST_TRACKED_VERSION = min(PYTHON_VERSION_INFO.keys())
94-
FAKE_PAST_DATE = datetime.date(1970, 1, 1)
95-
FAKE_FUTURE_DATE = datetime.date(9000, 1, 1)
107+
FAKE_PAST_DATE = datetime.date.min + datetime.timedelta(days=900)
108+
FAKE_FUTURE_DATE = datetime.date.max - datetime.timedelta(days=900)
96109
DEPRECATION_WARNING_PERIOD = datetime.timedelta(days=365)
97110
EOL_GRACE_PERIOD = datetime.timedelta(weeks=1)
98111

@@ -164,12 +177,14 @@ def check_python_version(
164177
if not version_info:
165178
if version_tuple < LOWEST_TRACKED_VERSION:
166179
version_info = VersionInfo(
180+
version="0.0",
167181
python_beta=FAKE_PAST_DATE,
168182
python_start=FAKE_PAST_DATE,
169183
python_eol=FAKE_PAST_DATE,
170184
)
171185
else:
172186
version_info = VersionInfo(
187+
version="999.0",
173188
python_beta=FAKE_FUTURE_DATE,
174189
python_start=FAKE_FUTURE_DATE,
175190
python_eol=FAKE_FUTURE_DATE,

0 commit comments

Comments
 (0)