Skip to content

Commit 9652a08

Browse files
authored
fix: pass resource aliases to file-level CommonResources (googleapis#16945)
File-level resources (like imported dependencies) were previously starved of CLI aliases during dummy MessageType creation. This caused false-positive namespace collisions because the collision checker couldn't see the explicit aliases. This wires `opts.resource_name_aliases` down through api.py into `CommonResource.build()` so the alias resolution works as originally intended. Fixes: googleapis#16952
1 parent 1718e31 commit 9652a08

2 files changed

Lines changed: 7 additions & 3 deletions

File tree

packages/gapic-generator/gapic/schema/api.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ class Proto:
101101
meta: metadata.Metadata = dataclasses.field(
102102
default_factory=metadata.Metadata,
103103
)
104+
resource_name_aliases: Mapping[str, str] = dataclasses.field(default_factory=dict)
104105

105106
def __getattr__(self, name: str):
106107
return getattr(self.file_pb2, name)
@@ -159,7 +160,7 @@ def messages(self) -> Mapping[str, wrappers.MessageType]:
159160
def resource_messages(self) -> Mapping[str, wrappers.MessageType]:
160161
"""Return the file level resources of the proto."""
161162
file_resource_messages = (
162-
(res.type, wrappers.CommonResource.build(res).message_type)
163+
(res.type, wrappers.CommonResource.build(res, aliases=self.resource_name_aliases).message_type)
163164
for res in self.file_pb2.options.Extensions[
164165
resource_pb2.resource_definition
165166
]
@@ -1214,6 +1215,7 @@ def proto(self) -> Proto:
12141215
meta=metadata.Metadata(
12151216
address=self.address,
12161217
),
1218+
resource_name_aliases=self.opts.resource_name_aliases,
12171219
)
12181220

12191221
# If this is not a file being generated, we do not need to

packages/gapic-generator/gapic/schema/wrappers.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2081,10 +2081,11 @@ def with_internal_methods(self, *, public_methods: Set[str]) -> "Method":
20812081
class CommonResource:
20822082
type_name: str
20832083
pattern: str
2084+
resource_name_aliases: Mapping[str, str] = dataclasses.field(default_factory=dict)
20842085

20852086
@classmethod
2086-
def build(cls, resource: resource_pb2.ResourceDescriptor):
2087-
return cls(type_name=resource.type, pattern=next(iter(resource.pattern)))
2087+
def build(cls, resource: resource_pb2.ResourceDescriptor, aliases: Optional[Mapping[str, str]] = None):
2088+
return cls(type_name=resource.type, pattern=next(iter(resource.pattern)), resource_name_aliases=aliases or {})
20882089

20892090
@utils.cached_property
20902091
def message_type(self):
@@ -2098,6 +2099,7 @@ def message_type(self):
20982099
fields={},
20992100
nested_enums={},
21002101
nested_messages={},
2102+
resource_name_aliases=self.resource_name_aliases,
21012103
)
21022104

21032105

0 commit comments

Comments
 (0)