diff --git a/gapic/ads-templates/%namespace/%name/%version/%sub/services/%service/transports/base.py.j2 b/gapic/ads-templates/%namespace/%name/%version/%sub/services/%service/transports/base.py.j2 index 3a4118b282..9c3bb8fa63 100644 --- a/gapic/ads-templates/%namespace/%name/%version/%sub/services/%service/transports/base.py.j2 +++ b/gapic/ads-templates/%namespace/%name/%version/%sub/services/%service/transports/base.py.j2 @@ -18,9 +18,14 @@ from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore {% filter sort_lines %} +{% set import_ns = namespace(has_operations_mixin=false) %} {% for method in service.methods.values() %} {{ method.input.ident.python_import }} +{% if method.output.ident|string() == "operations_pb2.Operation" %} +{% set import_ns.has_operations_mixin = True %} +{% else %} {{ method.output.ident.python_import }} +{% endif %} {% endfor %} {% if opts.add_iam_methods or api.has_iam_mixin %} from google.iam.v1 import iam_policy_pb2 # type: ignore @@ -30,6 +35,9 @@ from google.iam.v1 import policy_pb2 # type: ignore from google.cloud.location import locations_pb2 # type: ignore {% endif %} {% if api.has_operations_mixin %} +{% set import_ns.has_operations_mixin = True %} +{% endif %} +{% if import_ns.has_operations_mixin %} from google.longrunning import operations_pb2 # type: ignore {% endif %} {% endfilter %} diff --git a/gapic/ads-templates/%namespace/%name/%version/%sub/services/%service/transports/grpc.py.j2 b/gapic/ads-templates/%namespace/%name/%version/%sub/services/%service/transports/grpc.py.j2 index a4fecf9c3e..9d4a91aa03 100644 --- a/gapic/ads-templates/%namespace/%name/%version/%sub/services/%service/transports/grpc.py.j2 +++ b/gapic/ads-templates/%namespace/%name/%version/%sub/services/%service/transports/grpc.py.j2 @@ -17,9 +17,14 @@ from google.auth.transport.grpc import SslCredentials # type: ignore import grpc # type: ignore {% filter sort_lines %} +{% set import_ns = namespace(has_operations_mixin=false) %} {% for method in service.methods.values() %} {{ method.input.ident.python_import }} +{% if method.output.ident|string() == "operations_pb2.Operation" %} +{% set import_ns.has_operations_mixin = True %} +{% else %} {{ method.output.ident.python_import }} +{% endif %} {% endfor %} {% if opts.add_iam_methods or api.has_iam_mixin %} from google.iam.v1 import iam_policy_pb2 # type: ignore @@ -29,6 +34,9 @@ from google.iam.v1 import policy_pb2 # type: ignore from google.cloud.location import locations_pb2 # type: ignore {% endif %} {% if api.has_operations_mixin %} +{% set import_ns.has_operations_mixin = True %} +{% endif %} +{% if import_ns.has_operations_mixin %} from google.longrunning import operations_pb2 # type: ignore {% endif %} {% endfilter %} diff --git a/gapic/ads-templates/tests/unit/gapic/%name_%version/%sub/test_%service.py.j2 b/gapic/ads-templates/tests/unit/gapic/%name_%version/%sub/test_%service.py.j2 index 6bb8a31241..77974cf5ed 100644 --- a/gapic/ads-templates/tests/unit/gapic/%name_%version/%sub/test_%service.py.j2 +++ b/gapic/ads-templates/tests/unit/gapic/%name_%version/%sub/test_%service.py.j2 @@ -44,12 +44,11 @@ from google.api_core import path_template from google.api_core import future from google.api_core import operation from google.api_core import operations_v1 -from google.longrunning import operations_pb2 # type: ignore {% endif %}{# lro #} {% if api.has_location_mixin %} from google.cloud.location import locations_pb2 {% endif %} -{% if api.has_operations_mixin %} +{% if api.has_operations_mixin or service.has_lro %} from google.longrunning import operations_pb2 # type: ignore {% endif %} from google.api_core import gapic_v1 diff --git a/gapic/templates/%namespace/%name_%version/%sub/services/%service/transports/base.py.j2 b/gapic/templates/%namespace/%name_%version/%sub/services/%service/transports/base.py.j2 index b31e5fd85d..b2469654df 100644 --- a/gapic/templates/%namespace/%name_%version/%sub/services/%service/transports/base.py.j2 +++ b/gapic/templates/%namespace/%name_%version/%sub/services/%service/transports/base.py.j2 @@ -20,9 +20,14 @@ from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore {% filter sort_lines %} +{% set import_ns = namespace(has_operations_mixin=false) %} {% for method in service.methods.values() %} {{ method.input.ident.python_import }} +{% if method.output.ident|string() == "operations_pb2.Operation" %} +{% set import_ns.has_operations_mixin = True %} +{% else %} {{ method.output.ident.python_import }} +{% endif %} {% endfor %} {% if opts.add_iam_methods or api.has_iam_mixin %} from google.iam.v1 import iam_policy_pb2 # type: ignore @@ -32,6 +37,9 @@ from google.iam.v1 import policy_pb2 # type: ignore from google.cloud.location import locations_pb2 # type: ignore {% endif %} {% if api.has_operations_mixin %} +{% set import_ns.has_operations_mixin = True %} +{% endif %} +{% if import_ns.has_operations_mixin %} from google.longrunning import operations_pb2 # type: ignore {% endif %} {% endfilter %} diff --git a/gapic/templates/%namespace/%name_%version/%sub/services/%service/transports/grpc.py.j2 b/gapic/templates/%namespace/%name_%version/%sub/services/%service/transports/grpc.py.j2 index 668330cd2b..2e4f26a8a7 100644 --- a/gapic/templates/%namespace/%name_%version/%sub/services/%service/transports/grpc.py.j2 +++ b/gapic/templates/%namespace/%name_%version/%sub/services/%service/transports/grpc.py.j2 @@ -17,9 +17,14 @@ from google.auth.transport.grpc import SslCredentials # type: ignore import grpc # type: ignore {% filter sort_lines %} +{% set import_ns = namespace(has_operations_mixin=false) %} {% for method in service.methods.values() %} {{ method.input.ident.python_import }} +{% if method.output.ident|string() == "operations_pb2.Operation" %} +{% set import_ns.has_operations_mixin = True %} +{% else %} {{ method.output.ident.python_import }} +{% endif %} {% endfor %} {% if opts.add_iam_methods or api.has_iam_mixin %} from google.iam.v1 import iam_policy_pb2 # type: ignore @@ -29,6 +34,9 @@ from google.iam.v1 import policy_pb2 # type: ignore from google.cloud.location import locations_pb2 # type: ignore {% endif %} {% if api.has_operations_mixin %} +{% set import_ns.has_operations_mixin = True %} +{% endif %} +{% if import_ns.has_operations_mixin %} from google.longrunning import operations_pb2 # type: ignore {% endif %} {% endfilter %} diff --git a/gapic/templates/%namespace/%name_%version/%sub/services/%service/transports/grpc_asyncio.py.j2 b/gapic/templates/%namespace/%name_%version/%sub/services/%service/transports/grpc_asyncio.py.j2 index 0288b5cd64..94e2952fcc 100644 --- a/gapic/templates/%namespace/%name_%version/%sub/services/%service/transports/grpc_asyncio.py.j2 +++ b/gapic/templates/%namespace/%name_%version/%sub/services/%service/transports/grpc_asyncio.py.j2 @@ -17,9 +17,14 @@ import grpc # type: ignore from grpc.experimental import aio # type: ignore {% filter sort_lines %} +{% set import_ns = namespace(has_operations_mixin=false) %} {% for method in service.methods.values() %} {{ method.input.ident.python_import }} +{% if method.output.ident|string() == "operations_pb2.Operation" %} +{% set import_ns.has_operations_mixin = True %} +{% else %} {{ method.output.ident.python_import }} +{% endif %} {% endfor %} {% if opts.add_iam_methods or api.has_iam_mixin %} from google.iam.v1 import iam_policy_pb2 # type: ignore @@ -29,6 +34,9 @@ from google.iam.v1 import policy_pb2 # type: ignore from google.cloud.location import locations_pb2 # type: ignore {% endif %} {% if api.has_operations_mixin %} +{% set import_ns.has_operations_mixin = True %} +{% endif %} +{% if import_ns.has_operations_mixin %} from google.longrunning import operations_pb2 # type: ignore {% endif %} {% endfilter %} diff --git a/gapic/templates/%namespace/%name_%version/%sub/services/%service/transports/rest.py.j2 b/gapic/templates/%namespace/%name_%version/%sub/services/%service/transports/rest.py.j2 index 4e5d9e45cb..52493d180e 100644 --- a/gapic/templates/%namespace/%name_%version/%sub/services/%service/transports/rest.py.j2 +++ b/gapic/templates/%namespace/%name_%version/%sub/services/%service/transports/rest.py.j2 @@ -26,8 +26,9 @@ from google.iam.v1 import policy_pb2 # type: ignore {% if api.has_location_mixin %} from google.cloud.location import locations_pb2 # type: ignore {% endif %} +{% set import_ns = namespace(has_operations_mixin=false) %} {% if api.has_operations_mixin %} -from google.longrunning import operations_pb2 # type: ignore +{% set import_ns.has_operations_mixin = True %} {% endif %} from requests import __version__ as requests_version import dataclasses @@ -45,13 +46,20 @@ except AttributeError: # pragma: NO COVER {% filter sort_lines %} {% for method in service.methods.values() %} {{method.input.ident.python_import}} +{% if method.output.ident|string() == "operations_pb2.Operation" %} +{% set import_ns.has_operations_mixin = True %} +{% else %} {{method.output.ident.python_import}} +{% endif %} {% endfor %} {% if opts.add_iam_methods %} from google.iam.v1 import iam_policy_pb2 # type: ignore from google.iam.v1 import policy_pb2 # type: ignore {% endif %} {% endfilter %} +{% if import_ns.has_operations_mixin %} +from google.longrunning import operations_pb2 # type: ignore +{% endif %} from .base import {{service.name}}Transport, DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO diff --git a/gapic/templates/tests/unit/gapic/%name_%version/%sub/test_%service.py.j2 b/gapic/templates/tests/unit/gapic/%name_%version/%sub/test_%service.py.j2 index 5c40748686..ceb92c806b 100644 --- a/gapic/templates/tests/unit/gapic/%name_%version/%sub/test_%service.py.j2 +++ b/gapic/templates/tests/unit/gapic/%name_%version/%sub/test_%service.py.j2 @@ -52,12 +52,11 @@ from google.api_core import future {% if service.has_lro %} from google.api_core import operation from google.api_core import operations_v1 -from google.longrunning import operations_pb2 # type: ignore {% endif %}{# lro #} {% if api.has_location_mixin %} from google.cloud.location import locations_pb2 {% endif %} -{% if api.has_operations_mixin %} +{% if api.has_operations_mixin or service.has_lro %} from google.longrunning import operations_pb2 # type: ignore {% endif %} from google.api_core import gapic_v1 diff --git a/tests/integration/goldens/asset/google/cloud/asset_v1/services/asset_service/transports/base.py b/tests/integration/goldens/asset/google/cloud/asset_v1/services/asset_service/transports/base.py index c1008068ad..d46bee37dc 100755 --- a/tests/integration/goldens/asset/google/cloud/asset_v1/services/asset_service/transports/base.py +++ b/tests/integration/goldens/asset/google/cloud/asset_v1/services/asset_service/transports/base.py @@ -28,7 +28,6 @@ from google.oauth2 import service_account # type: ignore from google.cloud.asset_v1.types import asset_service -from google.longrunning import operations_pb2 # type: ignore from google.longrunning import operations_pb2 # type: ignore from google.protobuf import empty_pb2 # type: ignore diff --git a/tests/integration/goldens/asset/google/cloud/asset_v1/services/asset_service/transports/grpc.py b/tests/integration/goldens/asset/google/cloud/asset_v1/services/asset_service/transports/grpc.py index 46d1f503b8..53958bcf81 100755 --- a/tests/integration/goldens/asset/google/cloud/asset_v1/services/asset_service/transports/grpc.py +++ b/tests/integration/goldens/asset/google/cloud/asset_v1/services/asset_service/transports/grpc.py @@ -26,7 +26,6 @@ import grpc # type: ignore from google.cloud.asset_v1.types import asset_service -from google.longrunning import operations_pb2 # type: ignore from google.longrunning import operations_pb2 # type: ignore from google.protobuf import empty_pb2 # type: ignore from .base import AssetServiceTransport, DEFAULT_CLIENT_INFO diff --git a/tests/integration/goldens/asset/google/cloud/asset_v1/services/asset_service/transports/grpc_asyncio.py b/tests/integration/goldens/asset/google/cloud/asset_v1/services/asset_service/transports/grpc_asyncio.py index 49f4fe4e5e..c8f62d768b 100755 --- a/tests/integration/goldens/asset/google/cloud/asset_v1/services/asset_service/transports/grpc_asyncio.py +++ b/tests/integration/goldens/asset/google/cloud/asset_v1/services/asset_service/transports/grpc_asyncio.py @@ -26,7 +26,6 @@ from grpc.experimental import aio # type: ignore from google.cloud.asset_v1.types import asset_service -from google.longrunning import operations_pb2 # type: ignore from google.longrunning import operations_pb2 # type: ignore from google.protobuf import empty_pb2 # type: ignore from .base import AssetServiceTransport, DEFAULT_CLIENT_INFO diff --git a/tests/integration/goldens/asset/google/cloud/asset_v1/services/asset_service/transports/rest.py b/tests/integration/goldens/asset/google/cloud/asset_v1/services/asset_service/transports/rest.py index ed446c9cf8..662dc38002 100755 --- a/tests/integration/goldens/asset/google/cloud/asset_v1/services/asset_service/transports/rest.py +++ b/tests/integration/goldens/asset/google/cloud/asset_v1/services/asset_service/transports/rest.py @@ -28,7 +28,6 @@ from google.protobuf import json_format from google.api_core import operations_v1 -from google.longrunning import operations_pb2 # type: ignore from requests import __version__ as requests_version import dataclasses import re @@ -42,8 +41,8 @@ from google.cloud.asset_v1.types import asset_service -from google.longrunning import operations_pb2 # type: ignore from google.protobuf import empty_pb2 # type: ignore +from google.longrunning import operations_pb2 # type: ignore from .base import AssetServiceTransport, DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO diff --git a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/services/eventarc/transports/base.py b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/services/eventarc/transports/base.py index 72b2cc0974..7096c28dcc 100755 --- a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/services/eventarc/transports/base.py +++ b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/services/eventarc/transports/base.py @@ -37,7 +37,6 @@ from google.cloud.location import locations_pb2 # type: ignore from google.iam.v1 import iam_policy_pb2 # type: ignore from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore from google.longrunning import operations_pb2 # type: ignore DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) diff --git a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/services/eventarc/transports/grpc.py b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/services/eventarc/transports/grpc.py index ae473c3b75..1b00e78106 100755 --- a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/services/eventarc/transports/grpc.py +++ b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/services/eventarc/transports/grpc.py @@ -35,7 +35,6 @@ from google.cloud.location import locations_pb2 # type: ignore from google.iam.v1 import iam_policy_pb2 # type: ignore from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore from google.longrunning import operations_pb2 # type: ignore from .base import EventarcTransport, DEFAULT_CLIENT_INFO diff --git a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/services/eventarc/transports/grpc_asyncio.py b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/services/eventarc/transports/grpc_asyncio.py index e37c3401b1..b6e2874c4c 100755 --- a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/services/eventarc/transports/grpc_asyncio.py +++ b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/services/eventarc/transports/grpc_asyncio.py @@ -35,7 +35,6 @@ from google.cloud.location import locations_pb2 # type: ignore from google.iam.v1 import iam_policy_pb2 # type: ignore from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore from google.longrunning import operations_pb2 # type: ignore from .base import EventarcTransport, DEFAULT_CLIENT_INFO from .grpc import EventarcGrpcTransport diff --git a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/services/eventarc/transports/rest.py b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/services/eventarc/transports/rest.py index 13a42d7eec..32a4100f5f 100755 --- a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/services/eventarc/transports/rest.py +++ b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/services/eventarc/transports/rest.py @@ -31,7 +31,6 @@ from google.iam.v1 import iam_policy_pb2 # type: ignore from google.iam.v1 import policy_pb2 # type: ignore from google.cloud.location import locations_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore from requests import __version__ as requests_version import dataclasses import re diff --git a/tests/integration/goldens/logging/google/cloud/logging_v2/services/config_service_v2/transports/base.py b/tests/integration/goldens/logging/google/cloud/logging_v2/services/config_service_v2/transports/base.py index e967588ea8..3b1f9f96fc 100755 --- a/tests/integration/goldens/logging/google/cloud/logging_v2/services/config_service_v2/transports/base.py +++ b/tests/integration/goldens/logging/google/cloud/logging_v2/services/config_service_v2/transports/base.py @@ -28,7 +28,6 @@ from google.oauth2 import service_account # type: ignore from google.cloud.logging_v2.types import logging_config -from google.longrunning import operations_pb2 # type: ignore from google.longrunning import operations_pb2 # type: ignore from google.protobuf import empty_pb2 # type: ignore diff --git a/tests/integration/goldens/logging/google/cloud/logging_v2/services/config_service_v2/transports/grpc.py b/tests/integration/goldens/logging/google/cloud/logging_v2/services/config_service_v2/transports/grpc.py index f2ba4a37f0..fc73445930 100755 --- a/tests/integration/goldens/logging/google/cloud/logging_v2/services/config_service_v2/transports/grpc.py +++ b/tests/integration/goldens/logging/google/cloud/logging_v2/services/config_service_v2/transports/grpc.py @@ -26,7 +26,6 @@ import grpc # type: ignore from google.cloud.logging_v2.types import logging_config -from google.longrunning import operations_pb2 # type: ignore from google.longrunning import operations_pb2 # type: ignore from google.protobuf import empty_pb2 # type: ignore from .base import ConfigServiceV2Transport, DEFAULT_CLIENT_INFO diff --git a/tests/integration/goldens/logging/google/cloud/logging_v2/services/config_service_v2/transports/grpc_asyncio.py b/tests/integration/goldens/logging/google/cloud/logging_v2/services/config_service_v2/transports/grpc_asyncio.py index 4cdb5ffe7c..e68ff98164 100755 --- a/tests/integration/goldens/logging/google/cloud/logging_v2/services/config_service_v2/transports/grpc_asyncio.py +++ b/tests/integration/goldens/logging/google/cloud/logging_v2/services/config_service_v2/transports/grpc_asyncio.py @@ -26,7 +26,6 @@ from grpc.experimental import aio # type: ignore from google.cloud.logging_v2.types import logging_config -from google.longrunning import operations_pb2 # type: ignore from google.longrunning import operations_pb2 # type: ignore from google.protobuf import empty_pb2 # type: ignore from .base import ConfigServiceV2Transport, DEFAULT_CLIENT_INFO diff --git a/tests/integration/goldens/redis/google/cloud/redis_v1/services/cloud_redis/transports/base.py b/tests/integration/goldens/redis/google/cloud/redis_v1/services/cloud_redis/transports/base.py index 021036407e..c0a9d6bc09 100755 --- a/tests/integration/goldens/redis/google/cloud/redis_v1/services/cloud_redis/transports/base.py +++ b/tests/integration/goldens/redis/google/cloud/redis_v1/services/cloud_redis/transports/base.py @@ -29,7 +29,6 @@ from google.cloud.location import locations_pb2 # type: ignore from google.cloud.redis_v1.types import cloud_redis -from google.longrunning import operations_pb2 # type: ignore from google.longrunning import operations_pb2 # type: ignore DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) diff --git a/tests/integration/goldens/redis/google/cloud/redis_v1/services/cloud_redis/transports/grpc.py b/tests/integration/goldens/redis/google/cloud/redis_v1/services/cloud_redis/transports/grpc.py index c797c13edf..7e07797c70 100755 --- a/tests/integration/goldens/redis/google/cloud/redis_v1/services/cloud_redis/transports/grpc.py +++ b/tests/integration/goldens/redis/google/cloud/redis_v1/services/cloud_redis/transports/grpc.py @@ -27,7 +27,6 @@ from google.cloud.location import locations_pb2 # type: ignore from google.cloud.redis_v1.types import cloud_redis -from google.longrunning import operations_pb2 # type: ignore from google.longrunning import operations_pb2 # type: ignore from .base import CloudRedisTransport, DEFAULT_CLIENT_INFO diff --git a/tests/integration/goldens/redis/google/cloud/redis_v1/services/cloud_redis/transports/grpc_asyncio.py b/tests/integration/goldens/redis/google/cloud/redis_v1/services/cloud_redis/transports/grpc_asyncio.py index e1f7ed8f42..354d27092a 100755 --- a/tests/integration/goldens/redis/google/cloud/redis_v1/services/cloud_redis/transports/grpc_asyncio.py +++ b/tests/integration/goldens/redis/google/cloud/redis_v1/services/cloud_redis/transports/grpc_asyncio.py @@ -27,7 +27,6 @@ from google.cloud.location import locations_pb2 # type: ignore from google.cloud.redis_v1.types import cloud_redis -from google.longrunning import operations_pb2 # type: ignore from google.longrunning import operations_pb2 # type: ignore from .base import CloudRedisTransport, DEFAULT_CLIENT_INFO from .grpc import CloudRedisGrpcTransport diff --git a/tests/integration/goldens/redis/google/cloud/redis_v1/services/cloud_redis/transports/rest.py b/tests/integration/goldens/redis/google/cloud/redis_v1/services/cloud_redis/transports/rest.py index 45a69fe587..57b93dcbc8 100755 --- a/tests/integration/goldens/redis/google/cloud/redis_v1/services/cloud_redis/transports/rest.py +++ b/tests/integration/goldens/redis/google/cloud/redis_v1/services/cloud_redis/transports/rest.py @@ -29,7 +29,6 @@ from google.protobuf import json_format from google.api_core import operations_v1 from google.cloud.location import locations_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore from requests import __version__ as requests_version import dataclasses import re