Skip to content

Commit c3107db

Browse files
committed
fix: return tuple of version tuple and version string, fix tests
1 parent 1b2372f commit c3107db

File tree

4 files changed

+29
-25
lines changed

4 files changed

+29
-25
lines changed

google/api_core/_python_package_support.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import warnings
1818
import sys
19-
from typing import Optional
19+
from typing import Optional, Tuple
2020
from ._python_version_support import (
2121
_flatten_message,
2222
_get_distribution_and_import_packages,
@@ -25,7 +25,9 @@
2525
from packaging.version import parse as parse_version, Version as PackagingVersion
2626

2727

28-
def get_dependency_version(dependency_name: str) -> Optional[PackagingVersion]:
28+
def get_dependency_version(
29+
dependency_name: str,
30+
) -> Tuple[Optional[PackagingVersion], str]:
2931
"""Get the parsed version of an installed package dependency.
3032
3133
This function checks for an installed package and returns its version
@@ -36,8 +38,9 @@ def get_dependency_version(dependency_name: str) -> Optional[PackagingVersion]:
3638
dependency_name: The distribution name of the package (e.g., 'requests').
3739
3840
Returns:
39-
A `packaging.version.Version` object, or `None` if the package
40-
is not found or another error occurs during version discovery.
41+
A tuple containing the `packaging.version.Version` object and the
42+
version string, or `(None, '--')` if the package is not found or
43+
another error occurs during version discovery.
4144
"""
4245
try:
4346
if sys.version_info >= (3, 8):
@@ -90,9 +93,9 @@ def warn_deprecation_for_versions_less_than(
9093
`dependent_package` , which contain the import packages, the
9194
distribution packages, and pretty string with both the
9295
distribution and import packages for the dependency and the
93-
dependent, respectively; and `next_supported_version` and
94-
`version_used`, which refer to supported and currently-used
95-
versions of the dependency.
96+
dependent, respectively; and `next_supported_version`,
97+
`version_used`, and `version_used_string`, which refer to supported
98+
and currently-used versions of the dependency.
9699
97100
"""
98101
if (
@@ -138,7 +141,9 @@ def warn_deprecation_for_versions_less_than(
138141
dependent_package=dependent_package,
139142
next_supported_version=next_supported_version,
140143
version_used=version_used,
141-
)
144+
version_used_string=version_used_string
145+
),
146+
FutureWarning
142147
)
143148

144149

google/api_core/_python_version_support.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ def min_python(date: datetime.date) -> str:
195195
{min_python(today)}, and then update {package_label}.
196196
"""
197197
)
198-
warnings.warn(message)
198+
warnings.warn(message, FutureWarning)
199199
return PythonVersionStatus.PYTHON_VERSION_UNSUPPORTED
200200

201201
eol_date = version_info.python_eol + EOL_GRACE_PERIOD
@@ -210,7 +210,7 @@ def min_python(date: datetime.date) -> str:
210210
{min_python(today)}, and then update {package_label}.
211211
"""
212212
)
213-
warnings.warn(message)
213+
warnings.warn(message, FutureWarning)
214214
return PythonVersionStatus.PYTHON_VERSION_EOL
215215

216216
if gapic_deprecation <= today <= gapic_end:
@@ -224,7 +224,7 @@ def min_python(date: datetime.date) -> str:
224224
then update {package_label}.
225225
"""
226226
)
227-
warnings.warn(message)
227+
warnings.warn(message, FutureWarning)
228228
return PythonVersionStatus.PYTHON_VERSION_DEPRECATED
229229

230230
return PythonVersionStatus.PYTHON_VERSION_SUPPORTED

tests/unit/test_python_package_support.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,12 @@
3232
def test_get_dependency_version_py38_plus(mock_version):
3333
"""Test get_dependency_version on Python 3.8+."""
3434
mock_version.return_value = "1.2.3"
35-
assert get_dependency_version("some-package") == parse_version("1.2.3")
35+
assert get_dependency_version("some-package") == (parse_version("1.2.3"), "1.2.3")
3636
mock_version.assert_called_once_with("some-package")
3737

3838
# Test package not found
3939
mock_version.side_effect = ImportError
40-
assert get_dependency_version("not-a-package") is None
40+
assert get_dependency_version("not-a-package") == (None, "--")
4141

4242

4343
# TODO(https://github.com/googleapis/python-api-core/issues/835): Remove
@@ -49,14 +49,14 @@ def test_get_dependency_version_py37(mock_get_distribution):
4949
mock_dist = MagicMock()
5050
mock_dist.version = "4.5.6"
5151
mock_get_distribution.return_value = mock_dist
52-
assert get_dependency_version("another-package") == parse_version("4.5.6")
52+
assert get_dependency_version("another-package") == (parse_version("4.5.6"), "4.5.6")
5353
mock_get_distribution.assert_called_once_with("another-package")
5454

5555
# Test package not found
5656
mock_get_distribution.side_effect = (
5757
Exception # pkg_resources has its own exception types
5858
)
59-
assert get_dependency_version("not-a-package") is None
59+
assert get_dependency_version("not-a-package") == (None, "--")
6060

6161

6262
@patch("google.api_core._python_package_support._get_distribution_and_import_packages")
@@ -71,9 +71,8 @@ def test_warn_deprecation_for_versions_less_than(
7171
("my-package (my.package)", "my-package"),
7272
]
7373

74-
# Case 1: Installed version is less than required, should warn.
75-
mock_get_version.return_value = parse_version("1.0.0")
76-
with pytest.warns(UserWarning) as record:
74+
mock_get_version.return_value = (parse_version("1.0.0"), "1.0.0")
75+
with pytest.warns(FutureWarning) as record:
7776
warn_deprecation_for_versions_less_than("my.package", "dep.package", "2.0.0")
7877
assert len(record) == 1
7978
assert (
@@ -87,17 +86,17 @@ def test_warn_deprecation_for_versions_less_than(
8786

8887
# Case 2: Installed version is equal to required, should not warn.
8988
mock_get_packages.reset_mock()
90-
mock_get_version.return_value = parse_version("2.0.0")
89+
mock_get_version.return_value = (parse_version("2.0.0"), "2.0.0")
9190
warn_deprecation_for_versions_less_than("my.package", "dep.package", "2.0.0")
9291

9392
# Case 3: Installed version is greater than required, should not warn.
9493
mock_get_packages.reset_mock()
95-
mock_get_version.return_value = parse_version("3.0.0")
94+
mock_get_version.return_value = (parse_version("3.0.0"), "3.0.0")
9695
warn_deprecation_for_versions_less_than("my.package", "dep.package", "2.0.0")
9796

9897
# Case 4: Dependency not found, should not warn.
9998
mock_get_packages.reset_mock()
100-
mock_get_version.return_value = None
99+
mock_get_version.return_value = (None, "--")
101100
warn_deprecation_for_versions_less_than("my.package", "dep.package", "2.0.0")
102101

103102
# Assert that no warnings were recorded
@@ -109,9 +108,9 @@ def test_warn_deprecation_for_versions_less_than(
109108
("dep-package (dep.package)", "dep-package"),
110109
("my-package (my.package)", "my-package"),
111110
]
112-
mock_get_version.return_value = parse_version("1.0.0")
111+
mock_get_version.return_value = (parse_version("1.0.0"), "1.0.0")
113112
template = "Custom warning for {dependency_package} used by {dependent_package}."
114-
with pytest.warns(UserWarning) as record:
113+
with pytest.warns(FutureWarning) as record:
115114
warn_deprecation_for_versions_less_than(
116115
"my.package", "dep.package", "2.0.0", message_template=template
117116
)

tests/unit/test_python_version_support.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ def test_all_tracked_versions_and_date_scenarios(
129129
assert len(w) == 0
130130
# All other statuses should issue a warning
131131
else:
132-
with pytest.warns(UserWarning) as record:
132+
with pytest.warns(FutureWarning) as record:
133133
result = check_python_version(today=mock_date)
134134
assert len(record) == 1
135135

@@ -216,7 +216,7 @@ def test_untracked_older_version_is_unsupported():
216216
with patch(
217217
"google.api_core._python_version_support.sys.version_info", mock_py_version
218218
):
219-
with pytest.warns(UserWarning) as record:
219+
with pytest.warns(FutureWarning) as record:
220220
mock_date = datetime.date(2025, 1, 15)
221221
result = check_python_version(today=mock_date)
222222

0 commit comments

Comments
 (0)