Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions gapic/generator/generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,12 @@ def _generate_samples_and_manifest(
autogen_specs = list(
samplegen.generate_sample_specs(api_schema, opts=opts))

# TODO: Support the generation of REST snippets.
autogen_specs = [
spec for spec in autogen_specs
if spec["transport"] != api.TRANSPORT_REST
]

# Also process any handwritten sample specs
handwritten_specs = samplegen.parse_handwritten_specs(
self._sample_configs)
Expand Down
13 changes: 11 additions & 2 deletions gapic/samplegen/samplegen.py
Original file line number Diff line number Diff line change
Expand Up @@ -990,6 +990,15 @@ def generate_request_object(api_schema: api.API, service: wrappers.Service, mess
return request


def _transport_type_from_transport(transport: str) -> str:
if transport == api.TRANSPORT_GRPC:
return "sync"
elif transport == api.TRANSPORT_GRPC_ASYNC:
return "async"
else: # api.TRANSPORT_REST
return "rest"


def generate_sample_specs(api_schema: api.API, *, opts) -> Generator[Dict[str, Any], None, None]:
"""Given an API, generate basic sample specs for each method.

Expand All @@ -1006,10 +1015,10 @@ def generate_sample_specs(api_schema: api.API, *, opts) -> Generator[Dict[str, A
api_short_name = api_schema.services[f"{api_schema.naming.proto_package}.{service_name}"].shortname
api_version = api_schema.naming.version
for transport, client in service.clients.items():
transport_type = "async" if transport == api.TRANSPORT_GRPC_ASYNC else "sync"
transport_type = _transport_type_from_transport(transport)
for rpc_name, method_list in client.rpcs.items():
# Region Tag Format:
# [{START|END} ${apishortname}_${apiVersion}_generated_${serviceName}_${rpcName}_{sync|async}]
# [{START|END} ${apishortname}_${apiVersion}_generated_${serviceName}_${rpcName}_{sync|async|rest}]
region_tag = f"{api_short_name}_{api_version}_generated_{service_name}_{rpc_name}_{transport_type}"
spec = {
"rpc": rpc_name,
Expand Down
5 changes: 5 additions & 0 deletions tests/integration/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ py_gapic_library(
opt_args = [
"autogen-snippets",
],
transport = "grpc+rest",
)

# Credentials.
Expand All @@ -65,6 +66,7 @@ py_gapic_library(
opt_args = [
"autogen-snippets",
],
transport = "grpc+rest",
)

py_test(
Expand All @@ -89,6 +91,7 @@ py_gapic_library(
"python-gapic-name=eventarc",
"autogen-snippets",
],
transport = "grpc+rest",
)

py_test(
Expand All @@ -113,6 +116,7 @@ py_gapic_library(
"python-gapic-name=logging",
"autogen-snippets",
],
transport = "grpc+rest",
)

# Uncomment once https://github.com/googleapis/gapic-generator-python/issues/1359 is fixed
Expand All @@ -135,6 +139,7 @@ py_gapic_library(
opt_args = [
"autogen-snippets",
],
transport = "grpc+rest",
)

py_test(
Expand Down
65 changes: 65 additions & 0 deletions tests/integration/goldens/asset/google/cloud/asset_v1/gapic_metadata.json
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,71 @@
]
}
}
},
"rest": {
"libraryClient": "AssetServiceClient",
"rpcs": {
"AnalyzeIamPolicy": {
"methods": [
"analyze_iam_policy"
]
},
"AnalyzeIamPolicyLongrunning": {
"methods": [
"analyze_iam_policy_longrunning"
]
},
"BatchGetAssetsHistory": {
"methods": [
"batch_get_assets_history"
]
},
"CreateFeed": {
"methods": [
"create_feed"
]
},
"DeleteFeed": {
"methods": [
"delete_feed"
]
},
"ExportAssets": {
"methods": [
"export_assets"
]
},
"GetFeed": {
"methods": [
"get_feed"
]
},
"ListAssets": {
"methods": [
"list_assets"
]
},
"ListFeeds": {
"methods": [
"list_feeds"
]
},
"SearchAllIamPolicies": {
"methods": [
"search_all_iam_policies"
]
},
"SearchAllResources": {
"methods": [
"search_all_resources"
]
},
"UpdateFeed": {
"methods": [
"update_feed"
]
}
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
from .transports.base import AssetServiceTransport, DEFAULT_CLIENT_INFO
from .transports.grpc import AssetServiceGrpcTransport
from .transports.grpc_asyncio import AssetServiceGrpcAsyncIOTransport
from .transports.rest import AssetServiceRestTransport


class AssetServiceClientMeta(type):
Expand All @@ -55,6 +56,7 @@ class AssetServiceClientMeta(type):
_transport_registry = OrderedDict() # type: Dict[str, Type[AssetServiceTransport]]
_transport_registry["grpc"] = AssetServiceGrpcTransport
_transport_registry["grpc_asyncio"] = AssetServiceGrpcAsyncIOTransport
_transport_registry["rest"] = AssetServiceRestTransport

def get_transport_class(cls,
label: str = None,
Expand Down Expand Up @@ -316,6 +318,9 @@ def __init__(self, *,
transport (Union[str, AssetServiceTransport]): The
transport to use. If set to None, a transport is chosen
automatically.
NOTE: "rest" transport functionality is currently in a
beta state (preview). We welcome your feedback via an
issue in this library's source repository.
client_options (google.api_core.client_options.ClientOptions): Custom options for the
client. It won't take effect if a ``transport`` instance is provided.
(1) The ``api_endpoint`` property can be used to override the
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,20 @@
from .base import AssetServiceTransport
from .grpc import AssetServiceGrpcTransport
from .grpc_asyncio import AssetServiceGrpcAsyncIOTransport
from .rest import AssetServiceRestTransport
from .rest import AssetServiceRestInterceptor


# Compile a registry of transports.
_transport_registry = OrderedDict() # type: Dict[str, Type[AssetServiceTransport]]
_transport_registry['grpc'] = AssetServiceGrpcTransport
_transport_registry['grpc_asyncio'] = AssetServiceGrpcAsyncIOTransport
_transport_registry['rest'] = AssetServiceRestTransport

__all__ = (
'AssetServiceTransport',
'AssetServiceGrpcTransport',
'AssetServiceGrpcAsyncIOTransport',
'AssetServiceRestTransport',
'AssetServiceRestInterceptor',
)
Loading