Skip to content

Commit dce9bdf

Browse files
committed
Update code & integration tests to work on all Python versions
1 parent 5672ce5 commit dce9bdf

File tree

9 files changed

+281
-177
lines changed

9 files changed

+281
-177
lines changed

gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -42,31 +42,43 @@ except AttributeError:
4242
"least Python 3.10, before then, and " +
4343
f"then update {_package_label}.")
4444

45-
import pkg_resources
4645
from packaging.version import parse as parse_version
4746

48-
def _get_version(dependency_name):
49-
version_string = pkg_resources.get_distribution(dependency_name).version
50-
return parse_version(version_string)
51-
52-
try:
53-
_dependency_package = "google.protobuf"
54-
_version_used = _get_version(_dependency_package)
55-
_next_supported_version = "4.25.8"
56-
if _version_used < parse_version(_next_supported_version):
57-
logging.warning(f"DEPRECATION: Package {_package_label} depends on " +
58-
f"{_dependency_package}, currently installed at version " +
59-
f"{_version_used.__str__}. Future updates to " +
60-
f"{_package_label} will require {_dependency_package} at " +
61-
f"version {_next_supported_version} or higher. Please ensure " +
62-
"that either (a) your Python environment doesn't pin the " +
63-
f"version of {_dependency_package}, so that updates to " +
64-
f"{_package_label} can require the higher version, or " +
65-
"(b) you manually update your Python environment to use at " +
66-
f"least version {_next_supported_version} of " +
67-
f"{_dependency_package}.")
68-
except pkg_resources.DistributionNotFound:
69-
pass
47+
if sys.version_info < (3, 8):
48+
import pkg_resources
49+
def _get_version(dependency_name):
50+
try:
51+
version_string = pkg_resources.get_distribution(dependency_name).version
52+
return parse_version(version_string)
53+
except pkg_resources.DistributionNotFound:
54+
return None
55+
else:
56+
from importlib import metadata
57+
58+
def _get_version(dependency_name):
59+
try:
60+
version_string = metadata.version("requests")
61+
parsed_version = parse_version(version_string)
62+
return parsed_version.release
63+
except metadata.PackageNotFoundError:
64+
return None
65+
66+
_dependency_package = "google.protobuf"
67+
_next_supported_version = "4.25.8"
68+
_next_supported_version_tuple = (4, 25, 8)
69+
_version_used = _get_version(_dependency_package)
70+
if _version_used and _version_used < _next_supported_version_tuple:
71+
logging.warning(f"DEPRECATION: Package {_package_label} depends on " +
72+
f"{_dependency_package}, currently installed at version " +
73+
f"{_version_used.__str__}. Future updates to " +
74+
f"{_package_label} will require {_dependency_package} at " +
75+
f"version {_next_supported_version} or higher. Please ensure " +
76+
"that either (a) your Python environment doesn't pin the " +
77+
f"version of {_dependency_package}, so that updates to " +
78+
f"{_package_label} can require the higher version, or " +
79+
"(b) you manually update your Python environment to use at " +
80+
f"least version {_next_supported_version} of " +
81+
f"{_dependency_package}.")
7082

7183
{# Import subpackages. -#}
7284
{% for subpackage, _ in api.subpackages|dictsort %}

noxfile.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ def unit(session):
6060
"pyfakefs",
6161
"grpcio-status",
6262
"proto-plus",
63+
"setuptools", # TODO: Remove when not needed in __init__.py.j2
64+
"packaging", # TODO: Remove when not needed in __init__.py.j2
6365
)
6466
session.install("-e", ".")
6567
session.run(
@@ -481,6 +483,8 @@ def run_showcase_unit_tests(session, fail_under=100, rest_async_io_enabled=False
481483
"pytest-xdist",
482484
"asyncmock; python_version < '3.8'",
483485
"pytest-asyncio",
486+
"setuptools", # TODO: Remove when not needed in __init__.py.j2
487+
"packaging", # TODO: Remove when not needed in __init__.py.j2
484488
)
485489
# Run the tests.
486490
# NOTE: async rest is not supported against the minimum supported version of google-api-core.
@@ -595,6 +599,8 @@ def showcase_mypy(
595599
"types-protobuf",
596600
"types-requests",
597601
"types-dataclasses",
602+
"setuptools", # TODO: Remove when not needed in __init__.py.j2
603+
"packaging", # TODO: Remove when not needed in __init__.py.j2
598604
)
599605

600606
with showcase_library(session, templates=templates, other_opts=other_opts) as lib:
@@ -725,6 +731,8 @@ def mypy(session):
725731
"types-PyYAML",
726732
"types-dataclasses",
727733
"click==8.1.3",
734+
"setuptools", # TODO: Remove when not needed in __init__.py.j2
735+
"packaging", # TODO: Remove when not needed in __init__.py.j2
728736
)
729737
session.install(".")
730738
session.run("mypy", "-p", "gapic")

tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -46,31 +46,43 @@
4646
"least Python 3.10, before then, and " +
4747
f"then update {_package_label}.")
4848

49-
import pkg_resources
5049
from packaging.version import parse as parse_version
5150

52-
def _get_version(dependency_name):
53-
version_string = pkg_resources.get_distribution(dependency_name).version
54-
return parse_version(version_string)
51+
if sys.version_info < (3, 8):
52+
import pkg_resources
53+
def _get_version(dependency_name):
54+
try:
55+
version_string = pkg_resources.get_distribution(dependency_name).version
56+
return parse_version(version_string)
57+
except pkg_resources.DistributionNotFound:
58+
return None
59+
else:
60+
from importlib import metadata
5561

56-
try:
57-
_dependency_package = "google.protobuf"
58-
_version_used = _get_version(_dependency_package)
59-
_next_supported_version = "4.25.8"
60-
if _version_used < parse_version(_next_supported_version):
61-
logging.warning(f"DEPRECATION: Package {_package_label} depends on " +
62-
f"{_dependency_package}, currently installed at version " +
63-
f"{_version_used.__str__}. Future updates to " +
64-
f"{_package_label} will require {_dependency_package} at " +
65-
f"version {_next_supported_version} or higher. Please ensure " +
66-
"that either (a) your Python environment doesn't pin the " +
67-
f"version of {_dependency_package}, so that updates to " +
68-
f"{_package_label} can require the higher version, or " +
69-
"(b) you manually update your Python environment to use at " +
70-
f"least version {_next_supported_version} of " +
71-
f"{_dependency_package}.")
72-
except pkg_resources.DistributionNotFound:
73-
pass
62+
def _get_version(dependency_name):
63+
try:
64+
version_string = metadata.version("requests")
65+
parsed_version = parse_version(version_string)
66+
return parsed_version.release
67+
except metadata.PackageNotFoundError:
68+
return None
69+
70+
_dependency_package = "google.protobuf"
71+
_next_supported_version = "4.25.8"
72+
_next_supported_version_tuple = (4, 25, 8)
73+
_version_used = _get_version(_dependency_package)
74+
if _version_used and _version_used < _next_supported_version_tuple:
75+
logging.warning(f"DEPRECATION: Package {_package_label} depends on " +
76+
f"{_dependency_package}, currently installed at version " +
77+
f"{_version_used.__str__}. Future updates to " +
78+
f"{_package_label} will require {_dependency_package} at " +
79+
f"version {_next_supported_version} or higher. Please ensure " +
80+
"that either (a) your Python environment doesn't pin the " +
81+
f"version of {_dependency_package}, so that updates to " +
82+
f"{_package_label} can require the higher version, or " +
83+
"(b) you manually update your Python environment to use at " +
84+
f"least version {_next_supported_version} of " +
85+
f"{_dependency_package}.")
7486

7587

7688
from .services.asset_service import AssetServiceClient

tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -46,31 +46,43 @@
4646
"least Python 3.10, before then, and " +
4747
f"then update {_package_label}.")
4848

49-
import pkg_resources
5049
from packaging.version import parse as parse_version
5150

52-
def _get_version(dependency_name):
53-
version_string = pkg_resources.get_distribution(dependency_name).version
54-
return parse_version(version_string)
51+
if sys.version_info < (3, 8):
52+
import pkg_resources
53+
def _get_version(dependency_name):
54+
try:
55+
version_string = pkg_resources.get_distribution(dependency_name).version
56+
return parse_version(version_string)
57+
except pkg_resources.DistributionNotFound:
58+
return None
59+
else:
60+
from importlib import metadata
5561

56-
try:
57-
_dependency_package = "google.protobuf"
58-
_version_used = _get_version(_dependency_package)
59-
_next_supported_version = "4.25.8"
60-
if _version_used < parse_version(_next_supported_version):
61-
logging.warning(f"DEPRECATION: Package {_package_label} depends on " +
62-
f"{_dependency_package}, currently installed at version " +
63-
f"{_version_used.__str__}. Future updates to " +
64-
f"{_package_label} will require {_dependency_package} at " +
65-
f"version {_next_supported_version} or higher. Please ensure " +
66-
"that either (a) your Python environment doesn't pin the " +
67-
f"version of {_dependency_package}, so that updates to " +
68-
f"{_package_label} can require the higher version, or " +
69-
"(b) you manually update your Python environment to use at " +
70-
f"least version {_next_supported_version} of " +
71-
f"{_dependency_package}.")
72-
except pkg_resources.DistributionNotFound:
73-
pass
62+
def _get_version(dependency_name):
63+
try:
64+
version_string = metadata.version("requests")
65+
parsed_version = parse_version(version_string)
66+
return parsed_version.release
67+
except metadata.PackageNotFoundError:
68+
return None
69+
70+
_dependency_package = "google.protobuf"
71+
_next_supported_version = "4.25.8"
72+
_next_supported_version_tuple = (4, 25, 8)
73+
_version_used = _get_version(_dependency_package)
74+
if _version_used and _version_used < _next_supported_version_tuple:
75+
logging.warning(f"DEPRECATION: Package {_package_label} depends on " +
76+
f"{_dependency_package}, currently installed at version " +
77+
f"{_version_used.__str__}. Future updates to " +
78+
f"{_package_label} will require {_dependency_package} at " +
79+
f"version {_next_supported_version} or higher. Please ensure " +
80+
"that either (a) your Python environment doesn't pin the " +
81+
f"version of {_dependency_package}, so that updates to " +
82+
f"{_package_label} can require the higher version, or " +
83+
"(b) you manually update your Python environment to use at " +
84+
f"least version {_next_supported_version} of " +
85+
f"{_dependency_package}.")
7486

7587

7688
from .services.iam_credentials import IAMCredentialsClient

tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -46,31 +46,43 @@
4646
"least Python 3.10, before then, and " +
4747
f"then update {_package_label}.")
4848

49-
import pkg_resources
5049
from packaging.version import parse as parse_version
5150

52-
def _get_version(dependency_name):
53-
version_string = pkg_resources.get_distribution(dependency_name).version
54-
return parse_version(version_string)
51+
if sys.version_info < (3, 8):
52+
import pkg_resources
53+
def _get_version(dependency_name):
54+
try:
55+
version_string = pkg_resources.get_distribution(dependency_name).version
56+
return parse_version(version_string)
57+
except pkg_resources.DistributionNotFound:
58+
return None
59+
else:
60+
from importlib import metadata
5561

56-
try:
57-
_dependency_package = "google.protobuf"
58-
_version_used = _get_version(_dependency_package)
59-
_next_supported_version = "4.25.8"
60-
if _version_used < parse_version(_next_supported_version):
61-
logging.warning(f"DEPRECATION: Package {_package_label} depends on " +
62-
f"{_dependency_package}, currently installed at version " +
63-
f"{_version_used.__str__}. Future updates to " +
64-
f"{_package_label} will require {_dependency_package} at " +
65-
f"version {_next_supported_version} or higher. Please ensure " +
66-
"that either (a) your Python environment doesn't pin the " +
67-
f"version of {_dependency_package}, so that updates to " +
68-
f"{_package_label} can require the higher version, or " +
69-
"(b) you manually update your Python environment to use at " +
70-
f"least version {_next_supported_version} of " +
71-
f"{_dependency_package}.")
72-
except pkg_resources.DistributionNotFound:
73-
pass
62+
def _get_version(dependency_name):
63+
try:
64+
version_string = metadata.version("requests")
65+
parsed_version = parse_version(version_string)
66+
return parsed_version.release
67+
except metadata.PackageNotFoundError:
68+
return None
69+
70+
_dependency_package = "google.protobuf"
71+
_next_supported_version = "4.25.8"
72+
_next_supported_version_tuple = (4, 25, 8)
73+
_version_used = _get_version(_dependency_package)
74+
if _version_used and _version_used < _next_supported_version_tuple:
75+
logging.warning(f"DEPRECATION: Package {_package_label} depends on " +
76+
f"{_dependency_package}, currently installed at version " +
77+
f"{_version_used.__str__}. Future updates to " +
78+
f"{_package_label} will require {_dependency_package} at " +
79+
f"version {_next_supported_version} or higher. Please ensure " +
80+
"that either (a) your Python environment doesn't pin the " +
81+
f"version of {_dependency_package}, so that updates to " +
82+
f"{_package_label} can require the higher version, or " +
83+
"(b) you manually update your Python environment to use at " +
84+
f"least version {_next_supported_version} of " +
85+
f"{_dependency_package}.")
7486

7587

7688
from .services.eventarc import EventarcClient

tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -46,31 +46,43 @@
4646
"least Python 3.10, before then, and " +
4747
f"then update {_package_label}.")
4848

49-
import pkg_resources
5049
from packaging.version import parse as parse_version
5150

52-
def _get_version(dependency_name):
53-
version_string = pkg_resources.get_distribution(dependency_name).version
54-
return parse_version(version_string)
51+
if sys.version_info < (3, 8):
52+
import pkg_resources
53+
def _get_version(dependency_name):
54+
try:
55+
version_string = pkg_resources.get_distribution(dependency_name).version
56+
return parse_version(version_string)
57+
except pkg_resources.DistributionNotFound:
58+
return None
59+
else:
60+
from importlib import metadata
5561

56-
try:
57-
_dependency_package = "google.protobuf"
58-
_version_used = _get_version(_dependency_package)
59-
_next_supported_version = "4.25.8"
60-
if _version_used < parse_version(_next_supported_version):
61-
logging.warning(f"DEPRECATION: Package {_package_label} depends on " +
62-
f"{_dependency_package}, currently installed at version " +
63-
f"{_version_used.__str__}. Future updates to " +
64-
f"{_package_label} will require {_dependency_package} at " +
65-
f"version {_next_supported_version} or higher. Please ensure " +
66-
"that either (a) your Python environment doesn't pin the " +
67-
f"version of {_dependency_package}, so that updates to " +
68-
f"{_package_label} can require the higher version, or " +
69-
"(b) you manually update your Python environment to use at " +
70-
f"least version {_next_supported_version} of " +
71-
f"{_dependency_package}.")
72-
except pkg_resources.DistributionNotFound:
73-
pass
62+
def _get_version(dependency_name):
63+
try:
64+
version_string = metadata.version("requests")
65+
parsed_version = parse_version(version_string)
66+
return parsed_version.release
67+
except metadata.PackageNotFoundError:
68+
return None
69+
70+
_dependency_package = "google.protobuf"
71+
_next_supported_version = "4.25.8"
72+
_next_supported_version_tuple = (4, 25, 8)
73+
_version_used = _get_version(_dependency_package)
74+
if _version_used and _version_used < _next_supported_version_tuple:
75+
logging.warning(f"DEPRECATION: Package {_package_label} depends on " +
76+
f"{_dependency_package}, currently installed at version " +
77+
f"{_version_used.__str__}. Future updates to " +
78+
f"{_package_label} will require {_dependency_package} at " +
79+
f"version {_next_supported_version} or higher. Please ensure " +
80+
"that either (a) your Python environment doesn't pin the " +
81+
f"version of {_dependency_package}, so that updates to " +
82+
f"{_package_label} can require the higher version, or " +
83+
"(b) you manually update your Python environment to use at " +
84+
f"least version {_next_supported_version} of " +
85+
f"{_dependency_package}.")
7486

7587

7688
from .services.config_service_v2 import ConfigServiceV2Client

0 commit comments

Comments
 (0)