Skip to content

Commit 2139b90

Browse files
1 parent 133a1e0 commit 2139b90

File tree

2 files changed

+66
-35
lines changed

2 files changed

+66
-35
lines changed

‎google/api_core/_python_version_support.py‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,9 @@ def _flatten_message(text: str) -> str:
9797
return textwrap.dedent(text).strip().replace("\n", " ")
9898

9999

100-
def check_python_version(package: Optional[str] = "this package",
101-
today: Optional[datetime.date] = None) -> PythonVersionStatus:
100+
def check_python_version(
101+
package: Optional[str] = "this package", today: Optional[datetime.date] = None
102+
) -> PythonVersionStatus:
102103
"""Check the running Python version and issue a support warning if needed.
103104
104105
Args:

‎tests/unit/test_python_version_support.py‎

Lines changed: 63 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@
3030
VersionInfoMock = namedtuple("VersionInfoMock", ["major", "minor"])
3131

3232

33-
def _create_failure_message(expected, result, py_version, date,
34-
gapic_dep, py_eol, eol_warn, gapic_end):
33+
def _create_failure_message(
34+
expected, result, py_version, date, gapic_dep, py_eol, eol_warn, gapic_end
35+
):
3536
"""Create a detailed failure message for a test."""
3637
return textwrap.dedent(
3738
f"""
@@ -98,38 +99,49 @@ def generate_tracked_version_test_cases():
9899

99100
for name, params in test_cases.items():
100101
yield pytest.param(
101-
version_tuple, params["date"], params["expected"],
102-
gapic_dep, gapic_end, eol_warning_starts,
103-
id=f"{py_version_str}-{name}"
102+
version_tuple,
103+
params["date"],
104+
params["expected"],
105+
gapic_dep,
106+
gapic_end,
107+
eol_warning_starts,
108+
id=f"{py_version_str}-{name}",
104109
)
105110

106111

107112
@pytest.mark.parametrize(
108113
"version_tuple, mock_date, expected_status, gapic_dep, gapic_end, eol_warning_starts",
109-
generate_tracked_version_test_cases()
114+
generate_tracked_version_test_cases(),
110115
)
111116
def test_all_tracked_versions_and_date_scenarios(
112-
version_tuple, mock_date, expected_status, gapic_dep, gapic_end,
113-
eol_warning_starts
117+
version_tuple, mock_date, expected_status, gapic_dep, gapic_end, eol_warning_starts
114118
):
115119
"""Test all outcomes for each tracked version using parametrization."""
116-
mock_py_v = VersionInfoMock(
117-
major=version_tuple[0], minor=version_tuple[1]
118-
)
120+
mock_py_v = VersionInfoMock(major=version_tuple[0], minor=version_tuple[1])
119121

120122
with patch("google.api_core._python_version_support.sys.version_info", mock_py_v):
121-
with patch("google.api_core._python_version_support.logging.warning") as mock_log:
123+
with patch(
124+
"google.api_core._python_version_support.logging.warning"
125+
) as mock_log:
122126
result = check_python_version(today=mock_date)
123127

124-
if ((result != expected_status) or
125-
(result != PythonVersionStatus.PYTHON_VERSION_SUPPORTED) and mock_log.call_count != 1):
128+
if (
129+
(result != expected_status)
130+
or (result != PythonVersionStatus.PYTHON_VERSION_SUPPORTED)
131+
and mock_log.call_count != 1
132+
):
126133
py_version_str = f"{version_tuple[0]}.{version_tuple[1]}"
127134
version_info = PYTHON_VERSION_INFO[version_tuple]
128135

129136
fail_msg = _create_failure_message(
130-
expected_status, result, py_version_str,
131-
mock_date, gapic_dep, version_info.python_eol,
132-
eol_warning_starts, gapic_end
137+
expected_status,
138+
result,
139+
py_version_str,
140+
mock_date,
141+
gapic_dep,
142+
version_info.python_eol,
143+
eol_warning_starts,
144+
gapic_end,
133145
)
134146
pytest.fail(fail_msg, pytrace=False)
135147

@@ -138,41 +150,51 @@ def test_override_gapic_end_only():
138150
"""Test behavior when only gapic_end is manually overridden."""
139151
version_tuple = (3, 9)
140152
original_info = PYTHON_VERSION_INFO[version_tuple]
141-
mock_py_version = VersionInfoMock(
142-
major=version_tuple[0], minor=version_tuple[1]
143-
)
153+
mock_py_version = VersionInfoMock(major=version_tuple[0], minor=version_tuple[1])
144154

145155
custom_gapic_end = original_info.python_eol + datetime.timedelta(days=212)
146156
overridden_info = original_info._replace(gapic_end=custom_gapic_end)
147157

148-
with patch("google.api_core._python_version_support.sys.version_info", mock_py_version):
149-
with patch.dict('google.api_core._python_version_support.PYTHON_VERSION_INFO', {version_tuple: overridden_info}):
158+
with patch(
159+
"google.api_core._python_version_support.sys.version_info", mock_py_version
160+
):
161+
with patch.dict(
162+
"google.api_core._python_version_support.PYTHON_VERSION_INFO",
163+
{version_tuple: overridden_info},
164+
):
150165
result_at_boundary = check_python_version(today=custom_gapic_end)
151166
assert result_at_boundary == PythonVersionStatus.PYTHON_VERSION_EOL
152167

153168
result_after_boundary = check_python_version(
154169
today=custom_gapic_end + datetime.timedelta(days=1)
155170
)
156-
assert result_after_boundary == PythonVersionStatus.PYTHON_VERSION_UNSUPPORTED
171+
assert (
172+
result_after_boundary == PythonVersionStatus.PYTHON_VERSION_UNSUPPORTED
173+
)
157174

158175

159176
def test_override_gapic_deprecation_only():
160177
"""Test behavior when only gapic_deprecation is manually overridden."""
161178
version_tuple = (3, 9)
162179
original_info = PYTHON_VERSION_INFO[version_tuple]
163-
mock_py_version = VersionInfoMock(
164-
major=version_tuple[0], minor=version_tuple[1]
165-
)
180+
mock_py_version = VersionInfoMock(major=version_tuple[0], minor=version_tuple[1])
166181

167182
custom_gapic_dep = original_info.python_eol - datetime.timedelta(days=120)
168183
overridden_info = original_info._replace(gapic_deprecation=custom_gapic_dep)
169184

170-
with patch("google.api_core._python_version_support.sys.version_info", mock_py_version):
171-
with patch.dict('google.api_core._python_version_support.PYTHON_VERSION_INFO', {version_tuple: overridden_info}):
185+
with patch(
186+
"google.api_core._python_version_support.sys.version_info", mock_py_version
187+
):
188+
with patch.dict(
189+
"google.api_core._python_version_support.PYTHON_VERSION_INFO",
190+
{version_tuple: overridden_info},
191+
):
172192
result_before_boundary = check_python_version(
173193
today=custom_gapic_dep - datetime.timedelta(days=1)
174194
)
175-
assert result_before_boundary == PythonVersionStatus.PYTHON_VERSION_SUPPORTED
195+
assert (
196+
result_before_boundary == PythonVersionStatus.PYTHON_VERSION_SUPPORTED
197+
)
176198

177199
result_at_boundary = check_python_version(today=custom_gapic_dep)
178200
assert result_at_boundary == PythonVersionStatus.PYTHON_VERSION_DEPRECATED
@@ -182,8 +204,12 @@ def test_untracked_older_version_is_unsupported():
182204
"""Test that an old, untracked version is unsupported and logs."""
183205
mock_py_version = VersionInfoMock(major=3, minor=6)
184206

185-
with patch("google.api_core._python_version_support.sys.version_info", mock_py_version):
186-
with patch("google.api_core._python_version_support.logging.warning") as mock_log:
207+
with patch(
208+
"google.api_core._python_version_support.sys.version_info", mock_py_version
209+
):
210+
with patch(
211+
"google.api_core._python_version_support.logging.warning"
212+
) as mock_log:
187213
mock_date = datetime.date(2025, 1, 15)
188214
result = check_python_version(today=mock_date)
189215

@@ -197,8 +223,12 @@ def test_untracked_newer_version_is_supported():
197223
"""Test that a new, untracked version is supported and does not log."""
198224
mock_py_version = VersionInfoMock(major=4, minor=0)
199225

200-
with patch("google.api_core._python_version_support.sys.version_info", mock_py_version):
201-
with patch("google.api_core._python_version_support.logging.warning") as mock_log:
226+
with patch(
227+
"google.api_core._python_version_support.sys.version_info", mock_py_version
228+
):
229+
with patch(
230+
"google.api_core._python_version_support.logging.warning"
231+
) as mock_log:
202232
mock_date = datetime.date(2025, 1, 15)
203233
result = check_python_version(today=mock_date)
204234

0 commit comments

Comments
 (0)