Skip to content

Commit 75472e0

Browse files
authored
Merge branch 'master' into self-signed-jwt
2 parents 93ef495 + 203cdf1 commit 75472e0

File tree

19 files changed

+384
-62
lines changed

19 files changed

+384
-62
lines changed

.github/CODEOWNERS

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44
# For syntax help see:
55
# https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners#codeowners-syntax
66

7-
* @googleapis/actools-python @googleapis/yoshi-python @lukesneeringer
8-
*.yaml @googleapis/actools @googleapis/yoshi-python @googleapis/actools-python @lukesneeringer
7+
* @googleapis/actools-python @googleapis/yoshi-python
8+
*.yaml @googleapis/actools @googleapis/yoshi-python @googleapis/actools-python

.github/workflows/tests.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,4 +310,4 @@ jobs:
310310
python -m pip install autopep8
311311
- name: Check diff
312312
run: |
313-
find gapic tests -name "*.py" | xargs autopep8 --in-place --exit-code
313+
find gapic tests -name "*.py" | xargs autopep8 --diff --exit-code

CHANGELOG.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,33 @@
11
# Changelog
22

3+
### [0.42.2](https://www.github.com/googleapis/gapic-generator-python/compare/v0.42.1...v0.42.2) (2021-03-05)
4+
5+
6+
### Bug Fixes
7+
8+
* s/grpcAsync/grpc-async for gapic metadata ([#803](https://www.github.com/googleapis/gapic-generator-python/issues/803)) ([96f7864](https://www.github.com/googleapis/gapic-generator-python/commit/96f78640d90cf50c6b525924d14c6afe31874be6))
9+
10+
### [0.42.1](https://www.github.com/googleapis/gapic-generator-python/compare/v0.42.0...v0.42.1) (2021-03-04)
11+
12+
13+
### Bug Fixes
14+
15+
* corner case fix for empty request generated test ([#801](https://www.github.com/googleapis/gapic-generator-python/issues/801)) ([039dc71](https://www.github.com/googleapis/gapic-generator-python/commit/039dc713fed291142058741e1138da5a4bec542f))
16+
17+
## [0.42.0](https://www.github.com/googleapis/gapic-generator-python/compare/v0.41.0...v0.42.0) (2021-03-03)
18+
19+
20+
### Features
21+
22+
* add flag for gapic metadata ([#795](https://www.github.com/googleapis/gapic-generator-python/issues/795)) ([9cd7664](https://www.github.com/googleapis/gapic-generator-python/commit/9cd7664141835edcd8970629d9cf3abe4b7fd7c4))
23+
24+
## [0.41.0](https://www.github.com/googleapis/gapic-generator-python/compare/v0.40.12...v0.41.0) (2021-03-02)
25+
26+
27+
### Features
28+
29+
* add gapic metadata file ([#781](https://www.github.com/googleapis/gapic-generator-python/issues/781)) ([5dd8fcc](https://www.github.com/googleapis/gapic-generator-python/commit/5dd8fccf6b4da57edef0347beb07102634daa992))
30+
331
### [0.40.12](https://www.github.com/googleapis/gapic-generator-python/compare/v0.40.11...v0.40.12) (2021-02-26)
432

533

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,18 @@ if sys.version_info < (3, 7):
1111

1212
_lazy_type_to_package_map = {
1313
# Message types
14-
{%- for message in api.top_level_messages.values() %}
14+
{%- for _, message in api.top_level_messages|dictsort %}
1515
'{{ message.name }}': '{{ message.ident.package|join('.') }}.types.{{ message.ident.module }}',
1616
{%- endfor %}
17-
17+
1818
# Enum types
19-
{%- for enum in api.top_level_enums.values() %}
19+
{%- for _, enum in api.top_level_enums|dictsort %}
2020
'{{ enum.name }}': '{{ enum.ident.package|join('.') }}.types.{{enum.ident.module }}',
2121
{%- endfor %}
22-
22+
2323
{# TODO(yon-mg): add rest transport service once I know what this is #}
24-
# Client classes and transports
25-
{%- for service in api.services.values() %}
24+
# Client classes and transports
25+
{%- for _, service in api.services|dictsort %}
2626
'{{ service.client_name }}': '{{ service.meta.address.package|join('.') }}.services.{{ service.meta.address.module }}',
2727
'{{ service.transport_name }}': '{{ service.meta.address.package|join('.') }}.services.{{ service.meta.address.module }}.transports',
2828
'{{ service.grpc_transport_name }}': '{{ service.meta.address.package|join('.') }}.services.{{ service.meta.address.module }}.transports',
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{# {{ api.gapic_metadata_json(opts) }} #} {# TODO(dovs): This is temporarily commented out pending the addition of a flag #}

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,18 @@ if sys.version_info < (3, 7):
1111

1212
_lazy_type_to_package_map = {
1313
# Message types
14-
{%- for message in api.top_level_messages.values() %}
14+
{%- for _, message in api.top_level_messages|dictsort %}
1515
'{{ message.name }}': '{{ message.ident.package|join('.') }}.types.{{ message.ident.module }}',
1616
{%- endfor %}
17-
17+
1818
# Enum types
19-
{%- for enum in api.top_level_enums.values() %}
19+
{%- for _, enum in api.top_level_enums|dictsort %}
2020
'{{ enum.name }}': '{{ enum.ident.package|join('.') }}.types.{{enum.ident.module }}',
2121
{%- endfor %}
22-
22+
2323
{# TODO(yon-mg): add rest transport service once I know what this is #}
24-
# Client classes and transports
25-
{%- for service in api.services.values() %}
24+
# Client classes and transports
25+
{%- for _, service in api.services|dictsort %}
2626
'{{ service.client_name }}': '{{ service.meta.address.package|join('.') }}.services.{{ service.meta.address.module }}',
2727
'{{ service.transport_name }}': '{{ service.meta.address.package|join('.') }}.services.{{ service.meta.address.module }}.transports',
2828
'{{ service.grpc_transport_name }}': '{{ service.meta.address.package|join('.') }}.services.{{ service.meta.address.module }}.transports',
@@ -90,7 +90,7 @@ from {% if api.naming.module_namespace %}{{ api.naming.module_namespace|join('.'
9090
__all__ = (
9191
{%- filter indent %}
9292
{% filter sort_lines -%}
93-
{% for subpackage in api.subpackages.keys() -%}
93+
{% for subpackage, _ in api.subpackages|dictsort -%}
9494
'{{ subpackage }}',
9595
{% endfor -%}
9696
{% for service in api.services.values()|sort(attribute='name')

gapic/cli/generate.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,11 @@ def generate(
4747
# This generator uses a slightly different mechanism for determining
4848
# which files to generate; it tracks at package level rather than file
4949
# level.
50-
package = os.path.commonprefix([i.package for i in filter(
51-
lambda p: p.name in req.file_to_generate,
52-
req.proto_file,
53-
)]).rstrip('.')
50+
package = os.path.commonprefix([
51+
p.package
52+
for p in req.proto_file
53+
if p.name in req.file_to_generate
54+
]).rstrip('.')
5455

5556
# Build the API model object.
5657
# This object is a frozen representation of the whole API, and is sent

gapic/generator/generator.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,12 @@ def get_response(
105105
template_name, api_schema=api_schema, opts=opts)
106106
)
107107

108-
output_files.update(
109-
self._generate_samples_and_manifest(
110-
api_schema, self._env.get_template(sample_templates[0]),
111-
)
112-
)
108+
sample_output = self._generate_samples_and_manifest(
109+
api_schema,
110+
self._env.get_template(sample_templates[0]),
111+
) if sample_templates else {}
112+
113+
output_files.update(sample_output)
113114

114115
# Return the CodeGeneratorResponse output.
115116
res = CodeGeneratorResponse(
@@ -233,6 +234,10 @@ def _render_template(
233234
answer: Dict[str, CodeGeneratorResponse.File] = OrderedDict()
234235
skip_subpackages = False
235236

237+
# Very, very special case. This flag exists to gate this one file.
238+
if not opts.metadata and template_name.endswith("gapic_metadata.json.j2"):
239+
return answer
240+
236241
# Sanity check: Rendering per service and per proto would be a
237242
# combinatorial explosion and is almost certainly not what anyone
238243
# ever wants. Error colorfully on it.

gapic/schema/api.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@
2828

2929
from google.api_core import exceptions # type: ignore
3030
from google.api import resource_pb2 # type: ignore
31+
from google.gapic.metadata import gapic_metadata_pb2 # type: ignore
3132
from google.longrunning import operations_pb2 # type: ignore
3233
from google.protobuf import descriptor_pb2
34+
from google.protobuf.json_format import MessageToJson
3335

3436
import grpc # type: ignore
3537

@@ -392,6 +394,45 @@ def subpackages(self) -> Mapping[str, 'API']:
392394
)
393395
return answer
394396

397+
def gapic_metadata(self, options: Options) -> gapic_metadata_pb2.GapicMetadata:
398+
gm = gapic_metadata_pb2.GapicMetadata(
399+
schema="1.0",
400+
comment="This file maps proto services/RPCs to the corresponding library clients/methods",
401+
language="python",
402+
proto_package=self.naming.proto_package,
403+
library_package=".".join(
404+
self.naming.module_namespace +
405+
(self.naming.versioned_module_name,)
406+
),
407+
)
408+
409+
for service in sorted(self.services.values(), key=lambda s: s.name):
410+
service_desc = gm.services.get_or_create(service.name)
411+
412+
# At least one of "grpc" or "rest" is guaranteed to be present because
413+
# of the way that Options instances are created.
414+
# This assumes the options are generated by the class method factory.
415+
transports = []
416+
if "grpc" in options.transport:
417+
transports.append(("grpc", service.client_name))
418+
transports.append(("grpc-async", service.async_client_name))
419+
420+
if "rest" in options.transport:
421+
transports.append(("rest", service.client_name))
422+
423+
methods = sorted(service.methods.values(), key=lambda m: m.name)
424+
for tprt, client_name in transports:
425+
transport = service_desc.clients.get_or_create(tprt)
426+
transport.library_client = client_name
427+
for method in methods:
428+
method_desc = transport.rpcs.get_or_create(method.name)
429+
method_desc.methods.append(to_snake_case(method.name))
430+
431+
return gm
432+
433+
def gapic_metadata_json(self, options: Options) -> str:
434+
return MessageToJson(self.gapic_metadata(options), sort_keys=True)
435+
395436
def requires_package(self, pkg: Tuple[str, ...]) -> bool:
396437
return any(
397438
message.ident.package == pkg

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
{% block content %}
44
{# Import subpackages. -#}
5-
{% for subpackage in api.subpackages.keys() -%}
5+
{% for subpackage, _ in api.subpackages|dictsort -%}
66
from . import {{ subpackage }}
77
{% endfor -%}
88

0 commit comments

Comments
 (0)