Skip to content

Commit 9f6dd42

Browse files
authored
feat: Add support for python 312 (ads templates) (#1861)
1 parent 0f9f80b commit 9f6dd42

File tree

12 files changed

+119
-77
lines changed

12 files changed

+119
-77
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{% extends '_base.py.j2' %}
2+
{% block content %}
3+
4+
__version__ = "0.0.0"
5+
{% endblock %}

packages/gapic-generator/gapic/ads-templates/%namespace/%name/%version/%sub/services/%service/client.py.j2

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ from collections import OrderedDict
66
import os
77
import re
88
from typing import Callable, Dict, Mapping, MutableMapping, MutableSequence, Optional, {% if service.any_server_streaming %}Iterable, {% endif %}{% if service.any_client_streaming %}Iterator, {% endif %}Sequence, Tuple, Type, Union, cast
9-
import pkg_resources
109
{% if service.any_deprecated %}
1110
import warnings
1211
{% endif %}
@@ -21,6 +20,9 @@ from google.auth.transport.grpc import SslCredentials # type: ignore
2120
from google.auth.exceptions import MutualTLSChannelError # type: ignore
2221
from google.oauth2 import service_account # type: ignore
2322

23+
{% set package_path = api.naming.module_namespace|join('.') + "." + api.naming.versioned_module_name %}
24+
from {{package_path}} import gapic_version as package_version
25+
2426
try:
2527
OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault]
2628
except AttributeError: # pragma: NO COVER
@@ -806,14 +808,7 @@ class {{ service.client_name }}(metaclass={{ service.client_name }}Meta):
806808
{% endif %}
807809

808810

809-
try:
810-
DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
811-
gapic_version=pkg_resources.get_distribution(
812-
"{{ api.naming.warehouse_package_name }}",
813-
).version,
814-
)
815-
except pkg_resources.DistributionNotFound:
816-
DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo()
811+
DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__)
817812

818813

819814
__all__ = (

packages/gapic-generator/gapic/ads-templates/%namespace/%name/%version/%sub/services/%service/transports/base.py.j2

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import abc
66
from typing import Awaitable, Callable, Dict, Optional, Sequence, Union
7-
import pkg_resources
87

98
import google.auth # type: ignore
109
import google.api_core # type: ignore
@@ -42,14 +41,10 @@ from google.longrunning import operations_pb2 # type: ignore
4241
{% endif %}
4342
{% endfilter %}
4443

45-
try:
46-
DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
47-
gapic_version=pkg_resources.get_distribution(
48-
'{{ api.naming.warehouse_package_name }}',
49-
).version,
50-
)
51-
except pkg_resources.DistributionNotFound:
52-
DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo()
44+
{% set package_path = api.naming.module_namespace|join('.') + "." + api.naming.versioned_module_name %}
45+
from {{package_path}} import gapic_version as package_version
46+
47+
DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__)
5348

5449

5550
class {{ service.name }}Transport(abc.ABC):

packages/gapic-generator/gapic/ads-templates/%namespace/%name/%version/__init__.py.j2

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
import importlib
66
import sys
77

8+
{% set package_path = api.naming.module_namespace|join('.') + "." + api.naming.versioned_module_name %}
9+
from {{package_path}} import gapic_version as package_version
10+
11+
__version__ = package_version.__version__
12+
813

914
if sys.version_info < (3, 7):
1015
raise ImportError('This module requires Python 3.7 or later.')

packages/gapic-generator/gapic/ads-templates/.coveragerc.j2

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,6 @@ exclude_lines =
1111
pragma: NO COVER
1212
# Ignore debug-only repr
1313
def __repr__
14-
# Ignore pkg_resources exceptions.
15-
# This is added at the module level as a safeguard for if someone
16-
# generates the code and tries to run it without pip installing. This
17-
# makes it virtually impossible to test properly.
18-
except pkg_resources.DistributionNotFound
1914
# This is used to indicate a python version mismatch,
2015
# which is not easily tested in unit tests.
2116
raise ImportError

packages/gapic-generator/gapic/ads-templates/setup.py.j2

Lines changed: 65 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,55 +2,84 @@
22

33
{% block content %}
44

5+
import os
6+
import re
7+
58
import setuptools # type: ignore
69

10+
package_root = os.path.abspath(os.path.dirname(__file__))
711

8-
setuptools.setup(
9-
name='{{ api.naming.warehouse_package_name }}',
10-
version='0.0.1',
11-
{% if api.naming.namespace %}
12-
packages=setuptools.PEP420PackageFinder.find(),
13-
namespace_packages={{ api.naming.namespace_packages }},
14-
{% else %}
15-
packages=setuptools.find_packages(),
16-
{% endif %}
17-
platforms='Posix; MacOS X; Windows',
18-
include_package_data=True,
19-
install_requires=(
20-
{# TODO(dovs): remove when 1.x deprecation is complete #}
21-
{% if 'rest' in opts.transport %}
22-
"google-api-core[grpc] >= 2.10.0, < 3.0.0dev",
23-
{% else %}
24-
"google-api-core[grpc] >= 1.28.0, < 3.0.0dev",
25-
{% endif %}
26-
"googleapis-common-protos >= 1.53.0",
27-
"grpcio >= 1.10.0",
28-
"proto-plus >= 1.19.4, <2.0.0dev",
29-
"proto-plus >= 1.22.2, <2.0.0dev; python_version>='3.11'",
12+
name = '{{ api.naming.warehouse_package_name }}'
13+
14+
{% set warehouse_description = api.naming.warehouse_package_name.replace('-',' ')|title %}
15+
{% set package_path = api.naming.module_namespace|join('/') + "/" + api.naming.module_name + "/" + api.naming.version %}
16+
17+
description = "{{ warehouse_description }} API client library"
18+
19+
version = None
20+
21+
with open(os.path.join(package_root, '{{ package_path }}/gapic_version.py')) as fp:
22+
version_candidates = re.findall(r"(?<=\")\d+.\d+.\d+(?=\")", fp.read())
23+
assert (len(version_candidates) == 1)
24+
version = version_candidates[0]
25+
26+
if version[0] == "0":
27+
release_status = "Development Status :: 4 - Beta"
28+
else:
29+
release_status = "Development Status :: 5 - Production/Stable"
30+
31+
dependencies = [
32+
"google-api-core[grpc] >= 2.10.0, < 3.0.0dev",
33+
"googleapis-common-protos >= 1.53.0",
34+
"grpcio >= 1.10.0",
35+
"proto-plus >= 1.19.4, <2.0.0dev",
36+
"proto-plus >= 1.22.2, <2.0.0dev; python_version>='3.11'",
3037
{% if api.requires_package(('google', 'iam', 'v1')) %}
31-
'grpc-google-iam-v1',
38+
"grpc-google-iam-v1",
3239
{% endif %}
33-
),
34-
python_requires='>=3.7',{# Lazy import requires module-level getattr #}
40+
]
41+
42+
package_root = os.path.abspath(os.path.dirname(__file__))
43+
44+
packages = [
45+
package
46+
for package in setuptools.find_namespace_packages()
47+
if package.startswith("{{ api.naming.namespace_packages|first }}")
48+
]
49+
50+
setuptools.setup(
51+
name=name,
52+
version=version,
53+
description=description,
54+
author="Google LLC",
55+
author_email="googleapis-packages@google.com",
56+
license="Apache 2.0",
3557
setup_requires=[
3658
'libcst >= 0.2.5',
3759
],
3860
scripts=[
3961
'scripts/fixup_{{ api.naming.versioned_module_name }}_keywords.py',
4062
],
4163
classifiers=[
42-
'Development Status :: 3 - Alpha',
43-
'Intended Audience :: Developers',
44-
'Operating System :: OS Independent',
45-
'Programming Language :: Python :: 3.7',
46-
'Programming Language :: Python :: 3.8',
47-
'Programming Language :: Python :: 3.9',
48-
'Programming Language :: Python :: 3.10',
49-
'Programming Language :: Python :: 3.11',
50-
'Programming Language :: Python :: 3.12',
51-
'Topic :: Internet',
52-
'Topic :: Software Development :: Libraries :: Python Modules',
64+
release_status,
65+
"Intended Audience :: Developers",
66+
"License :: OSI Approved :: Apache Software License",
67+
"Programming Language :: Python",
68+
"Programming Language :: Python :: 3",
69+
"Programming Language :: Python :: 3.7",
70+
"Programming Language :: Python :: 3.8",
71+
"Programming Language :: Python :: 3.9",
72+
"Programming Language :: Python :: 3.10",
73+
"Programming Language :: Python :: 3.11",
74+
"Programming Language :: Python :: 3.12",
75+
"Operating System :: OS Independent",
76+
"Topic :: Internet",
5377
],
78+
platforms="Posix; MacOS X; Windows",
79+
packages=packages,
80+
python_requires=">=3.7",
81+
install_requires=dependencies,
82+
include_package_data=True,
5483
zip_safe=False,
5584
)
5685
{% endblock %}

packages/gapic-generator/gapic/templates/setup.py.j2

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import io
66
import os
7+
import re
78

89
import setuptools # type: ignore
910

@@ -16,10 +17,12 @@ name = '{{ api.naming.warehouse_package_name }}'
1617

1718
description = "{{ warehouse_description }} API client library"
1819

19-
version = {}
20+
version = None
21+
2022
with open(os.path.join(package_root, '{{ package_path }}/gapic_version.py')) as fp:
21-
exec(fp.read(), version)
22-
version = version["__version__"]
23+
version_candidates = re.findall(r"(?<=\")\d+.\d+.\d+(?=\")", fp.read())
24+
assert (len(version_candidates) == 1)
25+
version = version_candidates[0]
2326

2427
if version[0] == "0":
2528
release_status = "Development Status :: 4 - Beta"

packages/gapic-generator/tests/integration/goldens/asset/setup.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#
1616
import io
1717
import os
18+
import re
1819

1920
import setuptools # type: ignore
2021

@@ -25,10 +26,12 @@
2526

2627
description = "Google Cloud Asset API client library"
2728

28-
version = {}
29+
version = None
30+
2931
with open(os.path.join(package_root, 'google/cloud/asset/gapic_version.py')) as fp:
30-
exec(fp.read(), version)
31-
version = version["__version__"]
32+
version_candidates = re.findall(r"(?<=\")\d+.\d+.\d+(?=\")", fp.read())
33+
assert (len(version_candidates) == 1)
34+
version = version_candidates[0]
3235

3336
if version[0] == "0":
3437
release_status = "Development Status :: 4 - Beta"

packages/gapic-generator/tests/integration/goldens/credentials/setup.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#
1616
import io
1717
import os
18+
import re
1819

1920
import setuptools # type: ignore
2021

@@ -25,10 +26,12 @@
2526

2627
description = "Google Iam Credentials API client library"
2728

28-
version = {}
29+
version = None
30+
2931
with open(os.path.join(package_root, 'google/iam/credentials/gapic_version.py')) as fp:
30-
exec(fp.read(), version)
31-
version = version["__version__"]
32+
version_candidates = re.findall(r"(?<=\")\d+.\d+.\d+(?=\")", fp.read())
33+
assert (len(version_candidates) == 1)
34+
version = version_candidates[0]
3235

3336
if version[0] == "0":
3437
release_status = "Development Status :: 4 - Beta"

packages/gapic-generator/tests/integration/goldens/eventarc/setup.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#
1616
import io
1717
import os
18+
import re
1819

1920
import setuptools # type: ignore
2021

@@ -25,10 +26,12 @@
2526

2627
description = "Google Cloud Eventarc API client library"
2728

28-
version = {}
29+
version = None
30+
2931
with open(os.path.join(package_root, 'google/cloud/eventarc/gapic_version.py')) as fp:
30-
exec(fp.read(), version)
31-
version = version["__version__"]
32+
version_candidates = re.findall(r"(?<=\")\d+.\d+.\d+(?=\")", fp.read())
33+
assert (len(version_candidates) == 1)
34+
version = version_candidates[0]
3235

3336
if version[0] == "0":
3437
release_status = "Development Status :: 4 - Beta"

0 commit comments

Comments
 (0)