From 809bcd7ee993eba50cb3be1cf70658beb008db5b Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 1 Nov 2021 11:12:11 +0000 Subject: [PATCH] chore: use gapic-generator-python 0.53.4 (#134) - [ ] Regenerate this pull request now. docs: list oneofs in docstring fix(deps): require google-api-core >= 1.28.0 fix(deps): drop packaging dependency committer: busunkim96@ PiperOrigin-RevId: 406468269 Source-Link: https://github.com/googleapis/googleapis/commit/83d81b0c8fc22291a13398d6d77f02dc97a5b6f4 Source-Link: https://github.com/googleapis/googleapis-gen/commit/2ff001fbacb9e77e71d734de5f955c05fdae8526 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMmZmMDAxZmJhY2I5ZTc3ZTcxZDczNGRlNWY5NTVjMDVmZGFlODUyNiJ9 --- .../services/lookup_service/async_client.py | 10 +- .../services/lookup_service/client.py | 4 +- .../lookup_service/transports/base.py | 35 +--- .../lookup_service/transports/grpc_asyncio.py | 1 - .../registration_service/async_client.py | 112 +++++----- .../services/registration_service/client.py | 38 ++-- .../registration_service/transports/base.py | 35 +--- .../transports/grpc_asyncio.py | 1 - .../services/lookup_service/async_client.py | 10 +- .../services/lookup_service/client.py | 4 +- .../lookup_service/transports/base.py | 35 +--- .../lookup_service/transports/grpc_asyncio.py | 1 - .../registration_service/async_client.py | 112 +++++----- .../services/registration_service/client.py | 38 ++-- .../registration_service/transports/base.py | 35 +--- .../transports/grpc_asyncio.py | 1 - scripts/fixup_servicedirectory_v1_keywords.py | 194 ++++++++++++++++++ ...fixup_servicedirectory_v1beta1_keywords.py | 194 ++++++++++++++++++ setup.py | 3 +- testing/constraints-3.6.txt | 4 +- .../test_lookup_service.py | 91 +------- .../test_registration_service.py | 91 +------- .../test_lookup_service.py | 91 +------- .../test_registration_service.py | 91 +------- 24 files changed, 602 insertions(+), 629 deletions(-) create mode 100644 scripts/fixup_servicedirectory_v1_keywords.py create mode 100644 scripts/fixup_servicedirectory_v1beta1_keywords.py diff --git a/google/cloud/servicedirectory_v1/services/lookup_service/async_client.py b/google/cloud/servicedirectory_v1/services/lookup_service/async_client.py index eb1c1a25..42d05979 100644 --- a/google/cloud/servicedirectory_v1/services/lookup_service/async_client.py +++ b/google/cloud/servicedirectory_v1/services/lookup_service/async_client.py @@ -19,13 +19,15 @@ from typing import Dict, Sequence, Tuple, Type, Union import pkg_resources -import google.api_core.client_options as ClientOptions # type: ignore +from google.api_core.client_options import ClientOptions # type: ignore from google.api_core import exceptions as core_exceptions # type: ignore from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore +OptionalRetry = Union[retries.Retry, object] + from google.cloud.servicedirectory_v1.types import lookup_service from google.cloud.servicedirectory_v1.types import service from .transports.base import LookupServiceTransport, DEFAULT_CLIENT_INFO @@ -165,9 +167,9 @@ def __init__( async def resolve_service( self, - request: lookup_service.ResolveServiceRequest = None, + request: Union[lookup_service.ResolveServiceRequest, dict] = None, *, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> lookup_service.ResolveServiceResponse: @@ -176,7 +178,7 @@ async def resolve_service( considered an active developer method. Args: - request (:class:`google.cloud.servicedirectory_v1.types.ResolveServiceRequest`): + request (Union[google.cloud.servicedirectory_v1.types.ResolveServiceRequest, dict]): The request object. The request message for [LookupService.ResolveService][google.cloud.servicedirectory.v1.LookupService.ResolveService]. Looks up a service by its name, returns the service and diff --git a/google/cloud/servicedirectory_v1/services/lookup_service/client.py b/google/cloud/servicedirectory_v1/services/lookup_service/client.py index 37304de4..f202b92f 100644 --- a/google/cloud/servicedirectory_v1/services/lookup_service/client.py +++ b/google/cloud/servicedirectory_v1/services/lookup_service/client.py @@ -30,6 +30,8 @@ from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.oauth2 import service_account # type: ignore +OptionalRetry = Union[retries.Retry, object] + from google.cloud.servicedirectory_v1.types import lookup_service from google.cloud.servicedirectory_v1.types import service from .transports.base import LookupServiceTransport, DEFAULT_CLIENT_INFO @@ -371,7 +373,7 @@ def resolve_service( self, request: Union[lookup_service.ResolveServiceRequest, dict] = None, *, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> lookup_service.ResolveServiceResponse: diff --git a/google/cloud/servicedirectory_v1/services/lookup_service/transports/base.py b/google/cloud/servicedirectory_v1/services/lookup_service/transports/base.py index cecc9953..30bd7183 100644 --- a/google/cloud/servicedirectory_v1/services/lookup_service/transports/base.py +++ b/google/cloud/servicedirectory_v1/services/lookup_service/transports/base.py @@ -15,7 +15,6 @@ # import abc from typing import Awaitable, Callable, Dict, Optional, Sequence, Union -import packaging.version import pkg_resources import google.auth # type: ignore @@ -37,15 +36,6 @@ except pkg_resources.DistributionNotFound: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() -try: - # google.auth.__version__ was added in 1.26.0 - _GOOGLE_AUTH_VERSION = google.auth.__version__ -except AttributeError: - try: # try pkg_resources if it is available - _GOOGLE_AUTH_VERSION = pkg_resources.get_distribution("google-auth").version - except pkg_resources.DistributionNotFound: # pragma: NO COVER - _GOOGLE_AUTH_VERSION = None - class LookupServiceTransport(abc.ABC): """Abstract transport class for LookupService.""" @@ -95,7 +85,7 @@ def __init__( host += ":443" self._host = host - scopes_kwargs = self._get_scopes_kwargs(self._host, scopes) + scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} # Save the scopes. self._scopes = scopes @@ -128,29 +118,6 @@ def __init__( # Save the credentials. self._credentials = credentials - # TODO(busunkim): This method is in the base transport - # to avoid duplicating code across the transport classes. These functions - # should be deleted once the minimum required versions of google-auth is increased. - - # TODO: Remove this function once google-auth >= 1.25.0 is required - @classmethod - def _get_scopes_kwargs( - cls, host: str, scopes: Optional[Sequence[str]] - ) -> Dict[str, Optional[Sequence[str]]]: - """Returns scopes kwargs to pass to google-auth methods depending on the google-auth version""" - - scopes_kwargs = {} - - if _GOOGLE_AUTH_VERSION and ( - packaging.version.parse(_GOOGLE_AUTH_VERSION) - >= packaging.version.parse("1.25.0") - ): - scopes_kwargs = {"scopes": scopes, "default_scopes": cls.AUTH_SCOPES} - else: - scopes_kwargs = {"scopes": scopes or cls.AUTH_SCOPES} - - return scopes_kwargs - def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { diff --git a/google/cloud/servicedirectory_v1/services/lookup_service/transports/grpc_asyncio.py b/google/cloud/servicedirectory_v1/services/lookup_service/transports/grpc_asyncio.py index 36105e45..a23f4b24 100644 --- a/google/cloud/servicedirectory_v1/services/lookup_service/transports/grpc_asyncio.py +++ b/google/cloud/servicedirectory_v1/services/lookup_service/transports/grpc_asyncio.py @@ -20,7 +20,6 @@ from google.api_core import grpc_helpers_async # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore -import packaging.version import grpc # type: ignore from grpc.experimental import aio # type: ignore diff --git a/google/cloud/servicedirectory_v1/services/registration_service/async_client.py b/google/cloud/servicedirectory_v1/services/registration_service/async_client.py index 096d7d31..7be6fc14 100644 --- a/google/cloud/servicedirectory_v1/services/registration_service/async_client.py +++ b/google/cloud/servicedirectory_v1/services/registration_service/async_client.py @@ -19,13 +19,15 @@ from typing import Dict, Sequence, Tuple, Type, Union import pkg_resources -import google.api_core.client_options as ClientOptions # type: ignore +from google.api_core.client_options import ClientOptions # type: ignore from google.api_core import exceptions as core_exceptions # type: ignore from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore +OptionalRetry = Union[retries.Retry, object] + from google.cloud.servicedirectory_v1.services.registration_service import pagers from google.cloud.servicedirectory_v1.types import endpoint from google.cloud.servicedirectory_v1.types import endpoint as gcs_endpoint @@ -192,19 +194,19 @@ def __init__( async def create_namespace( self, - request: registration_service.CreateNamespaceRequest = None, + request: Union[registration_service.CreateNamespaceRequest, dict] = None, *, parent: str = None, namespace: gcs_namespace.Namespace = None, namespace_id: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_namespace.Namespace: r"""Creates a namespace, and returns the new Namespace. Args: - request (:class:`google.cloud.servicedirectory_v1.types.CreateNamespaceRequest`): + request (Union[google.cloud.servicedirectory_v1.types.CreateNamespaceRequest, dict]): The request object. The request message for [RegistrationService.CreateNamespace][google.cloud.servicedirectory.v1.RegistrationService.CreateNamespace]. parent (:class:`str`): @@ -292,17 +294,17 @@ async def create_namespace( async def list_namespaces( self, - request: registration_service.ListNamespacesRequest = None, + request: Union[registration_service.ListNamespacesRequest, dict] = None, *, parent: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListNamespacesAsyncPager: r"""Lists all namespaces. Args: - request (:class:`google.cloud.servicedirectory_v1.types.ListNamespacesRequest`): + request (Union[google.cloud.servicedirectory_v1.types.ListNamespacesRequest, dict]): The request object. The request message for [RegistrationService.ListNamespaces][google.cloud.servicedirectory.v1.RegistrationService.ListNamespaces]. parent (:class:`str`): @@ -373,17 +375,17 @@ async def list_namespaces( async def get_namespace( self, - request: registration_service.GetNamespaceRequest = None, + request: Union[registration_service.GetNamespaceRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> namespace.Namespace: r"""Gets a namespace. Args: - request (:class:`google.cloud.servicedirectory_v1.types.GetNamespaceRequest`): + request (Union[google.cloud.servicedirectory_v1.types.GetNamespaceRequest, dict]): The request object. The request message for [RegistrationService.GetNamespace][google.cloud.servicedirectory.v1.RegistrationService.GetNamespace]. name (:class:`str`): @@ -446,18 +448,18 @@ async def get_namespace( async def update_namespace( self, - request: registration_service.UpdateNamespaceRequest = None, + request: Union[registration_service.UpdateNamespaceRequest, dict] = None, *, namespace: gcs_namespace.Namespace = None, update_mask: field_mask_pb2.FieldMask = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_namespace.Namespace: r"""Updates a namespace. Args: - request (:class:`google.cloud.servicedirectory_v1.types.UpdateNamespaceRequest`): + request (Union[google.cloud.servicedirectory_v1.types.UpdateNamespaceRequest, dict]): The request object. The request message for [RegistrationService.UpdateNamespace][google.cloud.servicedirectory.v1.RegistrationService.UpdateNamespace]. namespace (:class:`google.cloud.servicedirectory_v1.types.Namespace`): @@ -529,10 +531,10 @@ async def update_namespace( async def delete_namespace( self, - request: registration_service.DeleteNamespaceRequest = None, + request: Union[registration_service.DeleteNamespaceRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> None: @@ -540,7 +542,7 @@ async def delete_namespace( and endpoints in the namespace. Args: - request (:class:`google.cloud.servicedirectory_v1.types.DeleteNamespaceRequest`): + request (Union[google.cloud.servicedirectory_v1.types.DeleteNamespaceRequest, dict]): The request object. The request message for [RegistrationService.DeleteNamespace][google.cloud.servicedirectory.v1.RegistrationService.DeleteNamespace]. name (:class:`str`): @@ -594,19 +596,19 @@ async def delete_namespace( async def create_service( self, - request: registration_service.CreateServiceRequest = None, + request: Union[registration_service.CreateServiceRequest, dict] = None, *, parent: str = None, service: gcs_service.Service = None, service_id: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_service.Service: r"""Creates a service, and returns the new Service. Args: - request (:class:`google.cloud.servicedirectory_v1.types.CreateServiceRequest`): + request (Union[google.cloud.servicedirectory_v1.types.CreateServiceRequest, dict]): The request object. The request message for [RegistrationService.CreateService][google.cloud.servicedirectory.v1.RegistrationService.CreateService]. parent (:class:`str`): @@ -693,17 +695,17 @@ async def create_service( async def list_services( self, - request: registration_service.ListServicesRequest = None, + request: Union[registration_service.ListServicesRequest, dict] = None, *, parent: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListServicesAsyncPager: r"""Lists all services belonging to a namespace. Args: - request (:class:`google.cloud.servicedirectory_v1.types.ListServicesRequest`): + request (Union[google.cloud.servicedirectory_v1.types.ListServicesRequest, dict]): The request object. The request message for [RegistrationService.ListServices][google.cloud.servicedirectory.v1.RegistrationService.ListServices]. parent (:class:`str`): @@ -774,17 +776,17 @@ async def list_services( async def get_service( self, - request: registration_service.GetServiceRequest = None, + request: Union[registration_service.GetServiceRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> service.Service: r"""Gets a service. Args: - request (:class:`google.cloud.servicedirectory_v1.types.GetServiceRequest`): + request (Union[google.cloud.servicedirectory_v1.types.GetServiceRequest, dict]): The request object. The request message for [RegistrationService.GetService][google.cloud.servicedirectory.v1.RegistrationService.GetService]. This should not be used for looking up a service. @@ -850,18 +852,18 @@ async def get_service( async def update_service( self, - request: registration_service.UpdateServiceRequest = None, + request: Union[registration_service.UpdateServiceRequest, dict] = None, *, service: gcs_service.Service = None, update_mask: field_mask_pb2.FieldMask = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_service.Service: r"""Updates a service. Args: - request (:class:`google.cloud.servicedirectory_v1.types.UpdateServiceRequest`): + request (Union[google.cloud.servicedirectory_v1.types.UpdateServiceRequest, dict]): The request object. The request message for [RegistrationService.UpdateService][google.cloud.servicedirectory.v1.RegistrationService.UpdateService]. service (:class:`google.cloud.servicedirectory_v1.types.Service`): @@ -933,10 +935,10 @@ async def update_service( async def delete_service( self, - request: registration_service.DeleteServiceRequest = None, + request: Union[registration_service.DeleteServiceRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> None: @@ -944,7 +946,7 @@ async def delete_service( associated with the service. Args: - request (:class:`google.cloud.servicedirectory_v1.types.DeleteServiceRequest`): + request (Union[google.cloud.servicedirectory_v1.types.DeleteServiceRequest, dict]): The request object. The request message for [RegistrationService.DeleteService][google.cloud.servicedirectory.v1.RegistrationService.DeleteService]. name (:class:`str`): @@ -998,19 +1000,19 @@ async def delete_service( async def create_endpoint( self, - request: registration_service.CreateEndpointRequest = None, + request: Union[registration_service.CreateEndpointRequest, dict] = None, *, parent: str = None, endpoint: gcs_endpoint.Endpoint = None, endpoint_id: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_endpoint.Endpoint: r"""Creates a endpoint, and returns the new Endpoint. Args: - request (:class:`google.cloud.servicedirectory_v1.types.CreateEndpointRequest`): + request (Union[google.cloud.servicedirectory_v1.types.CreateEndpointRequest, dict]): The request object. The request message for [RegistrationService.CreateEndpoint][google.cloud.servicedirectory.v1.RegistrationService.CreateEndpoint]. parent (:class:`str`): @@ -1096,17 +1098,17 @@ async def create_endpoint( async def list_endpoints( self, - request: registration_service.ListEndpointsRequest = None, + request: Union[registration_service.ListEndpointsRequest, dict] = None, *, parent: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListEndpointsAsyncPager: r"""Lists all endpoints. Args: - request (:class:`google.cloud.servicedirectory_v1.types.ListEndpointsRequest`): + request (Union[google.cloud.servicedirectory_v1.types.ListEndpointsRequest, dict]): The request object. The request message for [RegistrationService.ListEndpoints][google.cloud.servicedirectory.v1.RegistrationService.ListEndpoints]. parent (:class:`str`): @@ -1177,17 +1179,17 @@ async def list_endpoints( async def get_endpoint( self, - request: registration_service.GetEndpointRequest = None, + request: Union[registration_service.GetEndpointRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> endpoint.Endpoint: r"""Gets a endpoint. Args: - request (:class:`google.cloud.servicedirectory_v1.types.GetEndpointRequest`): + request (Union[google.cloud.servicedirectory_v1.types.GetEndpointRequest, dict]): The request object. The request message for [RegistrationService.GetEndpoint][google.cloud.servicedirectory.v1.RegistrationService.GetEndpoint]. This should not be used to lookup endpoints at runtime. @@ -1251,18 +1253,18 @@ async def get_endpoint( async def update_endpoint( self, - request: registration_service.UpdateEndpointRequest = None, + request: Union[registration_service.UpdateEndpointRequest, dict] = None, *, endpoint: gcs_endpoint.Endpoint = None, update_mask: field_mask_pb2.FieldMask = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_endpoint.Endpoint: r"""Updates a endpoint. Args: - request (:class:`google.cloud.servicedirectory_v1.types.UpdateEndpointRequest`): + request (Union[google.cloud.servicedirectory_v1.types.UpdateEndpointRequest, dict]): The request object. The request message for [RegistrationService.UpdateEndpoint][google.cloud.servicedirectory.v1.RegistrationService.UpdateEndpoint]. endpoint (:class:`google.cloud.servicedirectory_v1.types.Endpoint`): @@ -1333,17 +1335,17 @@ async def update_endpoint( async def delete_endpoint( self, - request: registration_service.DeleteEndpointRequest = None, + request: Union[registration_service.DeleteEndpointRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> None: r"""Deletes a endpoint. Args: - request (:class:`google.cloud.servicedirectory_v1.types.DeleteEndpointRequest`): + request (Union[google.cloud.servicedirectory_v1.types.DeleteEndpointRequest, dict]): The request object. The request message for [RegistrationService.DeleteEndpoint][google.cloud.servicedirectory.v1.RegistrationService.DeleteEndpoint]. name (:class:`str`): @@ -1397,9 +1399,9 @@ async def delete_endpoint( async def get_iam_policy( self, - request: iam_policy_pb2.GetIamPolicyRequest = None, + request: Union[iam_policy_pb2.GetIamPolicyRequest, dict] = None, *, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> policy_pb2.Policy: @@ -1407,7 +1409,7 @@ async def get_iam_policy( service only). Args: - request (:class:`google.iam.v1.iam_policy_pb2.GetIamPolicyRequest`): + request (Union[google.iam.v1.iam_policy_pb2.GetIamPolicyRequest, dict]): The request object. Request message for `GetIamPolicy` method. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1503,9 +1505,9 @@ async def get_iam_policy( async def set_iam_policy( self, - request: iam_policy_pb2.SetIamPolicyRequest = None, + request: Union[iam_policy_pb2.SetIamPolicyRequest, dict] = None, *, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> policy_pb2.Policy: @@ -1513,7 +1515,7 @@ async def set_iam_policy( service only). Args: - request (:class:`google.iam.v1.iam_policy_pb2.SetIamPolicyRequest`): + request (Union[google.iam.v1.iam_policy_pb2.SetIamPolicyRequest, dict]): The request object. Request message for `SetIamPolicy` method. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1609,9 +1611,9 @@ async def set_iam_policy( async def test_iam_permissions( self, - request: iam_policy_pb2.TestIamPermissionsRequest = None, + request: Union[iam_policy_pb2.TestIamPermissionsRequest, dict] = None, *, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> iam_policy_pb2.TestIamPermissionsResponse: @@ -1619,7 +1621,7 @@ async def test_iam_permissions( service only). Args: - request (:class:`google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest`): + request (Union[google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest, dict]): The request object. Request message for `TestIamPermissions` method. retry (google.api_core.retry.Retry): Designation of what errors, if any, diff --git a/google/cloud/servicedirectory_v1/services/registration_service/client.py b/google/cloud/servicedirectory_v1/services/registration_service/client.py index 0620761b..726551d2 100644 --- a/google/cloud/servicedirectory_v1/services/registration_service/client.py +++ b/google/cloud/servicedirectory_v1/services/registration_service/client.py @@ -30,6 +30,8 @@ from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.oauth2 import service_account # type: ignore +OptionalRetry = Union[retries.Retry, object] + from google.cloud.servicedirectory_v1.services.registration_service import pagers from google.cloud.servicedirectory_v1.types import endpoint from google.cloud.servicedirectory_v1.types import endpoint as gcs_endpoint @@ -418,7 +420,7 @@ def create_namespace( parent: str = None, namespace: gcs_namespace.Namespace = None, namespace_id: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_namespace.Namespace: @@ -516,7 +518,7 @@ def list_namespaces( request: Union[registration_service.ListNamespacesRequest, dict] = None, *, parent: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListNamespacesPager: @@ -597,7 +599,7 @@ def get_namespace( request: Union[registration_service.GetNamespaceRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> namespace.Namespace: @@ -671,7 +673,7 @@ def update_namespace( *, namespace: gcs_namespace.Namespace = None, update_mask: field_mask_pb2.FieldMask = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_namespace.Namespace: @@ -753,7 +755,7 @@ def delete_namespace( request: Union[registration_service.DeleteNamespaceRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> None: @@ -820,7 +822,7 @@ def create_service( parent: str = None, service: gcs_service.Service = None, service_id: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_service.Service: @@ -917,7 +919,7 @@ def list_services( request: Union[registration_service.ListServicesRequest, dict] = None, *, parent: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListServicesPager: @@ -998,7 +1000,7 @@ def get_service( request: Union[registration_service.GetServiceRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> service.Service: @@ -1075,7 +1077,7 @@ def update_service( *, service: gcs_service.Service = None, update_mask: field_mask_pb2.FieldMask = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_service.Service: @@ -1157,7 +1159,7 @@ def delete_service( request: Union[registration_service.DeleteServiceRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> None: @@ -1224,7 +1226,7 @@ def create_endpoint( parent: str = None, endpoint: gcs_endpoint.Endpoint = None, endpoint_id: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_endpoint.Endpoint: @@ -1320,7 +1322,7 @@ def list_endpoints( request: Union[registration_service.ListEndpointsRequest, dict] = None, *, parent: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListEndpointsPager: @@ -1401,7 +1403,7 @@ def get_endpoint( request: Union[registration_service.GetEndpointRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> endpoint.Endpoint: @@ -1476,7 +1478,7 @@ def update_endpoint( *, endpoint: gcs_endpoint.Endpoint = None, update_mask: field_mask_pb2.FieldMask = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_endpoint.Endpoint: @@ -1557,7 +1559,7 @@ def delete_endpoint( request: Union[registration_service.DeleteEndpointRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> None: @@ -1620,7 +1622,7 @@ def get_iam_policy( self, request: Union[iam_policy_pb2.GetIamPolicyRequest, dict] = None, *, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> policy_pb2.Policy: @@ -1725,7 +1727,7 @@ def set_iam_policy( self, request: Union[iam_policy_pb2.SetIamPolicyRequest, dict] = None, *, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> policy_pb2.Policy: @@ -1830,7 +1832,7 @@ def test_iam_permissions( self, request: Union[iam_policy_pb2.TestIamPermissionsRequest, dict] = None, *, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> iam_policy_pb2.TestIamPermissionsResponse: diff --git a/google/cloud/servicedirectory_v1/services/registration_service/transports/base.py b/google/cloud/servicedirectory_v1/services/registration_service/transports/base.py index 1733f7b7..2d4ca573 100644 --- a/google/cloud/servicedirectory_v1/services/registration_service/transports/base.py +++ b/google/cloud/servicedirectory_v1/services/registration_service/transports/base.py @@ -15,7 +15,6 @@ # import abc from typing import Awaitable, Callable, Dict, Optional, Sequence, Union -import packaging.version import pkg_resources import google.auth # type: ignore @@ -46,15 +45,6 @@ except pkg_resources.DistributionNotFound: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() -try: - # google.auth.__version__ was added in 1.26.0 - _GOOGLE_AUTH_VERSION = google.auth.__version__ -except AttributeError: - try: # try pkg_resources if it is available - _GOOGLE_AUTH_VERSION = pkg_resources.get_distribution("google-auth").version - except pkg_resources.DistributionNotFound: # pragma: NO COVER - _GOOGLE_AUTH_VERSION = None - class RegistrationServiceTransport(abc.ABC): """Abstract transport class for RegistrationService.""" @@ -104,7 +94,7 @@ def __init__( host += ":443" self._host = host - scopes_kwargs = self._get_scopes_kwargs(self._host, scopes) + scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} # Save the scopes. self._scopes = scopes @@ -137,29 +127,6 @@ def __init__( # Save the credentials. self._credentials = credentials - # TODO(busunkim): This method is in the base transport - # to avoid duplicating code across the transport classes. These functions - # should be deleted once the minimum required versions of google-auth is increased. - - # TODO: Remove this function once google-auth >= 1.25.0 is required - @classmethod - def _get_scopes_kwargs( - cls, host: str, scopes: Optional[Sequence[str]] - ) -> Dict[str, Optional[Sequence[str]]]: - """Returns scopes kwargs to pass to google-auth methods depending on the google-auth version""" - - scopes_kwargs = {} - - if _GOOGLE_AUTH_VERSION and ( - packaging.version.parse(_GOOGLE_AUTH_VERSION) - >= packaging.version.parse("1.25.0") - ): - scopes_kwargs = {"scopes": scopes, "default_scopes": cls.AUTH_SCOPES} - else: - scopes_kwargs = {"scopes": scopes or cls.AUTH_SCOPES} - - return scopes_kwargs - def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { diff --git a/google/cloud/servicedirectory_v1/services/registration_service/transports/grpc_asyncio.py b/google/cloud/servicedirectory_v1/services/registration_service/transports/grpc_asyncio.py index a159086b..4b9ee2c4 100644 --- a/google/cloud/servicedirectory_v1/services/registration_service/transports/grpc_asyncio.py +++ b/google/cloud/servicedirectory_v1/services/registration_service/transports/grpc_asyncio.py @@ -20,7 +20,6 @@ from google.api_core import grpc_helpers_async # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore -import packaging.version import grpc # type: ignore from grpc.experimental import aio # type: ignore diff --git a/google/cloud/servicedirectory_v1beta1/services/lookup_service/async_client.py b/google/cloud/servicedirectory_v1beta1/services/lookup_service/async_client.py index 622a3ade..032aed17 100644 --- a/google/cloud/servicedirectory_v1beta1/services/lookup_service/async_client.py +++ b/google/cloud/servicedirectory_v1beta1/services/lookup_service/async_client.py @@ -19,13 +19,15 @@ from typing import Dict, Sequence, Tuple, Type, Union import pkg_resources -import google.api_core.client_options as ClientOptions # type: ignore +from google.api_core.client_options import ClientOptions # type: ignore from google.api_core import exceptions as core_exceptions # type: ignore from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore +OptionalRetry = Union[retries.Retry, object] + from google.cloud.servicedirectory_v1beta1.types import lookup_service from google.cloud.servicedirectory_v1beta1.types import service from .transports.base import LookupServiceTransport, DEFAULT_CLIENT_INFO @@ -167,9 +169,9 @@ def __init__( async def resolve_service( self, - request: lookup_service.ResolveServiceRequest = None, + request: Union[lookup_service.ResolveServiceRequest, dict] = None, *, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> lookup_service.ResolveServiceResponse: @@ -179,7 +181,7 @@ async def resolve_service( active developer method. Args: - request (:class:`google.cloud.servicedirectory_v1beta1.types.ResolveServiceRequest`): + request (Union[google.cloud.servicedirectory_v1beta1.types.ResolveServiceRequest, dict]): The request object. The request message for [LookupService.ResolveService][google.cloud.servicedirectory.v1beta1.LookupService.ResolveService]. Looks up a service by its name, returns the service and diff --git a/google/cloud/servicedirectory_v1beta1/services/lookup_service/client.py b/google/cloud/servicedirectory_v1beta1/services/lookup_service/client.py index 4f0efe28..54acaeb4 100644 --- a/google/cloud/servicedirectory_v1beta1/services/lookup_service/client.py +++ b/google/cloud/servicedirectory_v1beta1/services/lookup_service/client.py @@ -30,6 +30,8 @@ from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.oauth2 import service_account # type: ignore +OptionalRetry = Union[retries.Retry, object] + from google.cloud.servicedirectory_v1beta1.types import lookup_service from google.cloud.servicedirectory_v1beta1.types import service from .transports.base import LookupServiceTransport, DEFAULT_CLIENT_INFO @@ -387,7 +389,7 @@ def resolve_service( self, request: Union[lookup_service.ResolveServiceRequest, dict] = None, *, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> lookup_service.ResolveServiceResponse: diff --git a/google/cloud/servicedirectory_v1beta1/services/lookup_service/transports/base.py b/google/cloud/servicedirectory_v1beta1/services/lookup_service/transports/base.py index e577c29e..bffbd8f3 100644 --- a/google/cloud/servicedirectory_v1beta1/services/lookup_service/transports/base.py +++ b/google/cloud/servicedirectory_v1beta1/services/lookup_service/transports/base.py @@ -15,7 +15,6 @@ # import abc from typing import Awaitable, Callable, Dict, Optional, Sequence, Union -import packaging.version import pkg_resources import google.auth # type: ignore @@ -37,15 +36,6 @@ except pkg_resources.DistributionNotFound: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() -try: - # google.auth.__version__ was added in 1.26.0 - _GOOGLE_AUTH_VERSION = google.auth.__version__ -except AttributeError: - try: # try pkg_resources if it is available - _GOOGLE_AUTH_VERSION = pkg_resources.get_distribution("google-auth").version - except pkg_resources.DistributionNotFound: # pragma: NO COVER - _GOOGLE_AUTH_VERSION = None - class LookupServiceTransport(abc.ABC): """Abstract transport class for LookupService.""" @@ -95,7 +85,7 @@ def __init__( host += ":443" self._host = host - scopes_kwargs = self._get_scopes_kwargs(self._host, scopes) + scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} # Save the scopes. self._scopes = scopes @@ -128,29 +118,6 @@ def __init__( # Save the credentials. self._credentials = credentials - # TODO(busunkim): This method is in the base transport - # to avoid duplicating code across the transport classes. These functions - # should be deleted once the minimum required versions of google-auth is increased. - - # TODO: Remove this function once google-auth >= 1.25.0 is required - @classmethod - def _get_scopes_kwargs( - cls, host: str, scopes: Optional[Sequence[str]] - ) -> Dict[str, Optional[Sequence[str]]]: - """Returns scopes kwargs to pass to google-auth methods depending on the google-auth version""" - - scopes_kwargs = {} - - if _GOOGLE_AUTH_VERSION and ( - packaging.version.parse(_GOOGLE_AUTH_VERSION) - >= packaging.version.parse("1.25.0") - ): - scopes_kwargs = {"scopes": scopes, "default_scopes": cls.AUTH_SCOPES} - else: - scopes_kwargs = {"scopes": scopes or cls.AUTH_SCOPES} - - return scopes_kwargs - def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { diff --git a/google/cloud/servicedirectory_v1beta1/services/lookup_service/transports/grpc_asyncio.py b/google/cloud/servicedirectory_v1beta1/services/lookup_service/transports/grpc_asyncio.py index 6c82fd38..bb95e225 100644 --- a/google/cloud/servicedirectory_v1beta1/services/lookup_service/transports/grpc_asyncio.py +++ b/google/cloud/servicedirectory_v1beta1/services/lookup_service/transports/grpc_asyncio.py @@ -20,7 +20,6 @@ from google.api_core import grpc_helpers_async # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore -import packaging.version import grpc # type: ignore from grpc.experimental import aio # type: ignore diff --git a/google/cloud/servicedirectory_v1beta1/services/registration_service/async_client.py b/google/cloud/servicedirectory_v1beta1/services/registration_service/async_client.py index f12f0845..dd1f8581 100644 --- a/google/cloud/servicedirectory_v1beta1/services/registration_service/async_client.py +++ b/google/cloud/servicedirectory_v1beta1/services/registration_service/async_client.py @@ -19,13 +19,15 @@ from typing import Dict, Sequence, Tuple, Type, Union import pkg_resources -import google.api_core.client_options as ClientOptions # type: ignore +from google.api_core.client_options import ClientOptions # type: ignore from google.api_core import exceptions as core_exceptions # type: ignore from google.api_core import gapic_v1 # type: ignore from google.api_core import retry as retries # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore +OptionalRetry = Union[retries.Retry, object] + from google.cloud.servicedirectory_v1beta1.services.registration_service import pagers from google.cloud.servicedirectory_v1beta1.types import endpoint from google.cloud.servicedirectory_v1beta1.types import endpoint as gcs_endpoint @@ -196,19 +198,19 @@ def __init__( async def create_namespace( self, - request: registration_service.CreateNamespaceRequest = None, + request: Union[registration_service.CreateNamespaceRequest, dict] = None, *, parent: str = None, namespace: gcs_namespace.Namespace = None, namespace_id: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_namespace.Namespace: r"""Creates a namespace, and returns the new namespace. Args: - request (:class:`google.cloud.servicedirectory_v1beta1.types.CreateNamespaceRequest`): + request (Union[google.cloud.servicedirectory_v1beta1.types.CreateNamespaceRequest, dict]): The request object. The request message for [RegistrationService.CreateNamespace][google.cloud.servicedirectory.v1beta1.RegistrationService.CreateNamespace]. parent (:class:`str`): @@ -296,17 +298,17 @@ async def create_namespace( async def list_namespaces( self, - request: registration_service.ListNamespacesRequest = None, + request: Union[registration_service.ListNamespacesRequest, dict] = None, *, parent: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListNamespacesAsyncPager: r"""Lists all namespaces. Args: - request (:class:`google.cloud.servicedirectory_v1beta1.types.ListNamespacesRequest`): + request (Union[google.cloud.servicedirectory_v1beta1.types.ListNamespacesRequest, dict]): The request object. The request message for [RegistrationService.ListNamespaces][google.cloud.servicedirectory.v1beta1.RegistrationService.ListNamespaces]. parent (:class:`str`): @@ -377,17 +379,17 @@ async def list_namespaces( async def get_namespace( self, - request: registration_service.GetNamespaceRequest = None, + request: Union[registration_service.GetNamespaceRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> namespace.Namespace: r"""Gets a namespace. Args: - request (:class:`google.cloud.servicedirectory_v1beta1.types.GetNamespaceRequest`): + request (Union[google.cloud.servicedirectory_v1beta1.types.GetNamespaceRequest, dict]): The request object. The request message for [RegistrationService.GetNamespace][google.cloud.servicedirectory.v1beta1.RegistrationService.GetNamespace]. name (:class:`str`): @@ -450,18 +452,18 @@ async def get_namespace( async def update_namespace( self, - request: registration_service.UpdateNamespaceRequest = None, + request: Union[registration_service.UpdateNamespaceRequest, dict] = None, *, namespace: gcs_namespace.Namespace = None, update_mask: field_mask_pb2.FieldMask = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_namespace.Namespace: r"""Updates a namespace. Args: - request (:class:`google.cloud.servicedirectory_v1beta1.types.UpdateNamespaceRequest`): + request (Union[google.cloud.servicedirectory_v1beta1.types.UpdateNamespaceRequest, dict]): The request object. The request message for [RegistrationService.UpdateNamespace][google.cloud.servicedirectory.v1beta1.RegistrationService.UpdateNamespace]. namespace (:class:`google.cloud.servicedirectory_v1beta1.types.Namespace`): @@ -533,10 +535,10 @@ async def update_namespace( async def delete_namespace( self, - request: registration_service.DeleteNamespaceRequest = None, + request: Union[registration_service.DeleteNamespaceRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> None: @@ -544,7 +546,7 @@ async def delete_namespace( and endpoints in the namespace. Args: - request (:class:`google.cloud.servicedirectory_v1beta1.types.DeleteNamespaceRequest`): + request (Union[google.cloud.servicedirectory_v1beta1.types.DeleteNamespaceRequest, dict]): The request object. The request message for [RegistrationService.DeleteNamespace][google.cloud.servicedirectory.v1beta1.RegistrationService.DeleteNamespace]. name (:class:`str`): @@ -598,19 +600,19 @@ async def delete_namespace( async def create_service( self, - request: registration_service.CreateServiceRequest = None, + request: Union[registration_service.CreateServiceRequest, dict] = None, *, parent: str = None, service: gcs_service.Service = None, service_id: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_service.Service: r"""Creates a service, and returns the new service. Args: - request (:class:`google.cloud.servicedirectory_v1beta1.types.CreateServiceRequest`): + request (Union[google.cloud.servicedirectory_v1beta1.types.CreateServiceRequest, dict]): The request object. The request message for [RegistrationService.CreateService][google.cloud.servicedirectory.v1beta1.RegistrationService.CreateService]. parent (:class:`str`): @@ -697,17 +699,17 @@ async def create_service( async def list_services( self, - request: registration_service.ListServicesRequest = None, + request: Union[registration_service.ListServicesRequest, dict] = None, *, parent: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListServicesAsyncPager: r"""Lists all services belonging to a namespace. Args: - request (:class:`google.cloud.servicedirectory_v1beta1.types.ListServicesRequest`): + request (Union[google.cloud.servicedirectory_v1beta1.types.ListServicesRequest, dict]): The request object. The request message for [RegistrationService.ListServices][google.cloud.servicedirectory.v1beta1.RegistrationService.ListServices]. parent (:class:`str`): @@ -778,17 +780,17 @@ async def list_services( async def get_service( self, - request: registration_service.GetServiceRequest = None, + request: Union[registration_service.GetServiceRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> service.Service: r"""Gets a service. Args: - request (:class:`google.cloud.servicedirectory_v1beta1.types.GetServiceRequest`): + request (Union[google.cloud.servicedirectory_v1beta1.types.GetServiceRequest, dict]): The request object. The request message for [RegistrationService.GetService][google.cloud.servicedirectory.v1beta1.RegistrationService.GetService]. This should not be used for looking up a service. @@ -854,18 +856,18 @@ async def get_service( async def update_service( self, - request: registration_service.UpdateServiceRequest = None, + request: Union[registration_service.UpdateServiceRequest, dict] = None, *, service: gcs_service.Service = None, update_mask: field_mask_pb2.FieldMask = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_service.Service: r"""Updates a service. Args: - request (:class:`google.cloud.servicedirectory_v1beta1.types.UpdateServiceRequest`): + request (Union[google.cloud.servicedirectory_v1beta1.types.UpdateServiceRequest, dict]): The request object. The request message for [RegistrationService.UpdateService][google.cloud.servicedirectory.v1beta1.RegistrationService.UpdateService]. service (:class:`google.cloud.servicedirectory_v1beta1.types.Service`): @@ -937,10 +939,10 @@ async def update_service( async def delete_service( self, - request: registration_service.DeleteServiceRequest = None, + request: Union[registration_service.DeleteServiceRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> None: @@ -948,7 +950,7 @@ async def delete_service( associated with the service. Args: - request (:class:`google.cloud.servicedirectory_v1beta1.types.DeleteServiceRequest`): + request (Union[google.cloud.servicedirectory_v1beta1.types.DeleteServiceRequest, dict]): The request object. The request message for [RegistrationService.DeleteService][google.cloud.servicedirectory.v1beta1.RegistrationService.DeleteService]. name (:class:`str`): @@ -1002,19 +1004,19 @@ async def delete_service( async def create_endpoint( self, - request: registration_service.CreateEndpointRequest = None, + request: Union[registration_service.CreateEndpointRequest, dict] = None, *, parent: str = None, endpoint: gcs_endpoint.Endpoint = None, endpoint_id: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_endpoint.Endpoint: r"""Creates an endpoint, and returns the new endpoint. Args: - request (:class:`google.cloud.servicedirectory_v1beta1.types.CreateEndpointRequest`): + request (Union[google.cloud.servicedirectory_v1beta1.types.CreateEndpointRequest, dict]): The request object. The request message for [RegistrationService.CreateEndpoint][google.cloud.servicedirectory.v1beta1.RegistrationService.CreateEndpoint]. parent (:class:`str`): @@ -1100,17 +1102,17 @@ async def create_endpoint( async def list_endpoints( self, - request: registration_service.ListEndpointsRequest = None, + request: Union[registration_service.ListEndpointsRequest, dict] = None, *, parent: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListEndpointsAsyncPager: r"""Lists all endpoints. Args: - request (:class:`google.cloud.servicedirectory_v1beta1.types.ListEndpointsRequest`): + request (Union[google.cloud.servicedirectory_v1beta1.types.ListEndpointsRequest, dict]): The request object. The request message for [RegistrationService.ListEndpoints][google.cloud.servicedirectory.v1beta1.RegistrationService.ListEndpoints]. parent (:class:`str`): @@ -1181,17 +1183,17 @@ async def list_endpoints( async def get_endpoint( self, - request: registration_service.GetEndpointRequest = None, + request: Union[registration_service.GetEndpointRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> endpoint.Endpoint: r"""Gets an endpoint. Args: - request (:class:`google.cloud.servicedirectory_v1beta1.types.GetEndpointRequest`): + request (Union[google.cloud.servicedirectory_v1beta1.types.GetEndpointRequest, dict]): The request object. The request message for [RegistrationService.GetEndpoint][google.cloud.servicedirectory.v1beta1.RegistrationService.GetEndpoint]. This should not be used to lookup endpoints at runtime. @@ -1255,18 +1257,18 @@ async def get_endpoint( async def update_endpoint( self, - request: registration_service.UpdateEndpointRequest = None, + request: Union[registration_service.UpdateEndpointRequest, dict] = None, *, endpoint: gcs_endpoint.Endpoint = None, update_mask: field_mask_pb2.FieldMask = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_endpoint.Endpoint: r"""Updates an endpoint. Args: - request (:class:`google.cloud.servicedirectory_v1beta1.types.UpdateEndpointRequest`): + request (Union[google.cloud.servicedirectory_v1beta1.types.UpdateEndpointRequest, dict]): The request object. The request message for [RegistrationService.UpdateEndpoint][google.cloud.servicedirectory.v1beta1.RegistrationService.UpdateEndpoint]. endpoint (:class:`google.cloud.servicedirectory_v1beta1.types.Endpoint`): @@ -1337,17 +1339,17 @@ async def update_endpoint( async def delete_endpoint( self, - request: registration_service.DeleteEndpointRequest = None, + request: Union[registration_service.DeleteEndpointRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> None: r"""Deletes an endpoint. Args: - request (:class:`google.cloud.servicedirectory_v1beta1.types.DeleteEndpointRequest`): + request (Union[google.cloud.servicedirectory_v1beta1.types.DeleteEndpointRequest, dict]): The request object. The request message for [RegistrationService.DeleteEndpoint][google.cloud.servicedirectory.v1beta1.RegistrationService.DeleteEndpoint]. name (:class:`str`): @@ -1401,9 +1403,9 @@ async def delete_endpoint( async def get_iam_policy( self, - request: iam_policy_pb2.GetIamPolicyRequest = None, + request: Union[iam_policy_pb2.GetIamPolicyRequest, dict] = None, *, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> policy_pb2.Policy: @@ -1411,7 +1413,7 @@ async def get_iam_policy( service only). Args: - request (:class:`google.iam.v1.iam_policy_pb2.GetIamPolicyRequest`): + request (Union[google.iam.v1.iam_policy_pb2.GetIamPolicyRequest, dict]): The request object. Request message for `GetIamPolicy` method. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1507,9 +1509,9 @@ async def get_iam_policy( async def set_iam_policy( self, - request: iam_policy_pb2.SetIamPolicyRequest = None, + request: Union[iam_policy_pb2.SetIamPolicyRequest, dict] = None, *, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> policy_pb2.Policy: @@ -1517,7 +1519,7 @@ async def set_iam_policy( service only). Args: - request (:class:`google.iam.v1.iam_policy_pb2.SetIamPolicyRequest`): + request (Union[google.iam.v1.iam_policy_pb2.SetIamPolicyRequest, dict]): The request object. Request message for `SetIamPolicy` method. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1613,9 +1615,9 @@ async def set_iam_policy( async def test_iam_permissions( self, - request: iam_policy_pb2.TestIamPermissionsRequest = None, + request: Union[iam_policy_pb2.TestIamPermissionsRequest, dict] = None, *, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> iam_policy_pb2.TestIamPermissionsResponse: @@ -1623,7 +1625,7 @@ async def test_iam_permissions( service only). Args: - request (:class:`google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest`): + request (Union[google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest, dict]): The request object. Request message for `TestIamPermissions` method. retry (google.api_core.retry.Retry): Designation of what errors, if any, diff --git a/google/cloud/servicedirectory_v1beta1/services/registration_service/client.py b/google/cloud/servicedirectory_v1beta1/services/registration_service/client.py index c963121e..a2cf6010 100644 --- a/google/cloud/servicedirectory_v1beta1/services/registration_service/client.py +++ b/google/cloud/servicedirectory_v1beta1/services/registration_service/client.py @@ -30,6 +30,8 @@ from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.oauth2 import service_account # type: ignore +OptionalRetry = Union[retries.Retry, object] + from google.cloud.servicedirectory_v1beta1.services.registration_service import pagers from google.cloud.servicedirectory_v1beta1.types import endpoint from google.cloud.servicedirectory_v1beta1.types import endpoint as gcs_endpoint @@ -436,7 +438,7 @@ def create_namespace( parent: str = None, namespace: gcs_namespace.Namespace = None, namespace_id: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_namespace.Namespace: @@ -534,7 +536,7 @@ def list_namespaces( request: Union[registration_service.ListNamespacesRequest, dict] = None, *, parent: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListNamespacesPager: @@ -615,7 +617,7 @@ def get_namespace( request: Union[registration_service.GetNamespaceRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> namespace.Namespace: @@ -689,7 +691,7 @@ def update_namespace( *, namespace: gcs_namespace.Namespace = None, update_mask: field_mask_pb2.FieldMask = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_namespace.Namespace: @@ -771,7 +773,7 @@ def delete_namespace( request: Union[registration_service.DeleteNamespaceRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> None: @@ -838,7 +840,7 @@ def create_service( parent: str = None, service: gcs_service.Service = None, service_id: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_service.Service: @@ -935,7 +937,7 @@ def list_services( request: Union[registration_service.ListServicesRequest, dict] = None, *, parent: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListServicesPager: @@ -1016,7 +1018,7 @@ def get_service( request: Union[registration_service.GetServiceRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> service.Service: @@ -1093,7 +1095,7 @@ def update_service( *, service: gcs_service.Service = None, update_mask: field_mask_pb2.FieldMask = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_service.Service: @@ -1175,7 +1177,7 @@ def delete_service( request: Union[registration_service.DeleteServiceRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> None: @@ -1242,7 +1244,7 @@ def create_endpoint( parent: str = None, endpoint: gcs_endpoint.Endpoint = None, endpoint_id: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_endpoint.Endpoint: @@ -1338,7 +1340,7 @@ def list_endpoints( request: Union[registration_service.ListEndpointsRequest, dict] = None, *, parent: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListEndpointsPager: @@ -1419,7 +1421,7 @@ def get_endpoint( request: Union[registration_service.GetEndpointRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> endpoint.Endpoint: @@ -1494,7 +1496,7 @@ def update_endpoint( *, endpoint: gcs_endpoint.Endpoint = None, update_mask: field_mask_pb2.FieldMask = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> gcs_endpoint.Endpoint: @@ -1575,7 +1577,7 @@ def delete_endpoint( request: Union[registration_service.DeleteEndpointRequest, dict] = None, *, name: str = None, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> None: @@ -1638,7 +1640,7 @@ def get_iam_policy( self, request: Union[iam_policy_pb2.GetIamPolicyRequest, dict] = None, *, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> policy_pb2.Policy: @@ -1743,7 +1745,7 @@ def set_iam_policy( self, request: Union[iam_policy_pb2.SetIamPolicyRequest, dict] = None, *, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> policy_pb2.Policy: @@ -1848,7 +1850,7 @@ def test_iam_permissions( self, request: Union[iam_policy_pb2.TestIamPermissionsRequest, dict] = None, *, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> iam_policy_pb2.TestIamPermissionsResponse: diff --git a/google/cloud/servicedirectory_v1beta1/services/registration_service/transports/base.py b/google/cloud/servicedirectory_v1beta1/services/registration_service/transports/base.py index 5e0dafe0..88ed88f0 100644 --- a/google/cloud/servicedirectory_v1beta1/services/registration_service/transports/base.py +++ b/google/cloud/servicedirectory_v1beta1/services/registration_service/transports/base.py @@ -15,7 +15,6 @@ # import abc from typing import Awaitable, Callable, Dict, Optional, Sequence, Union -import packaging.version import pkg_resources import google.auth # type: ignore @@ -46,15 +45,6 @@ except pkg_resources.DistributionNotFound: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() -try: - # google.auth.__version__ was added in 1.26.0 - _GOOGLE_AUTH_VERSION = google.auth.__version__ -except AttributeError: - try: # try pkg_resources if it is available - _GOOGLE_AUTH_VERSION = pkg_resources.get_distribution("google-auth").version - except pkg_resources.DistributionNotFound: # pragma: NO COVER - _GOOGLE_AUTH_VERSION = None - class RegistrationServiceTransport(abc.ABC): """Abstract transport class for RegistrationService.""" @@ -104,7 +94,7 @@ def __init__( host += ":443" self._host = host - scopes_kwargs = self._get_scopes_kwargs(self._host, scopes) + scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} # Save the scopes. self._scopes = scopes @@ -137,29 +127,6 @@ def __init__( # Save the credentials. self._credentials = credentials - # TODO(busunkim): This method is in the base transport - # to avoid duplicating code across the transport classes. These functions - # should be deleted once the minimum required versions of google-auth is increased. - - # TODO: Remove this function once google-auth >= 1.25.0 is required - @classmethod - def _get_scopes_kwargs( - cls, host: str, scopes: Optional[Sequence[str]] - ) -> Dict[str, Optional[Sequence[str]]]: - """Returns scopes kwargs to pass to google-auth methods depending on the google-auth version""" - - scopes_kwargs = {} - - if _GOOGLE_AUTH_VERSION and ( - packaging.version.parse(_GOOGLE_AUTH_VERSION) - >= packaging.version.parse("1.25.0") - ): - scopes_kwargs = {"scopes": scopes, "default_scopes": cls.AUTH_SCOPES} - else: - scopes_kwargs = {"scopes": scopes or cls.AUTH_SCOPES} - - return scopes_kwargs - def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { diff --git a/google/cloud/servicedirectory_v1beta1/services/registration_service/transports/grpc_asyncio.py b/google/cloud/servicedirectory_v1beta1/services/registration_service/transports/grpc_asyncio.py index 16be09b5..20287210 100644 --- a/google/cloud/servicedirectory_v1beta1/services/registration_service/transports/grpc_asyncio.py +++ b/google/cloud/servicedirectory_v1beta1/services/registration_service/transports/grpc_asyncio.py @@ -20,7 +20,6 @@ from google.api_core import grpc_helpers_async # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore -import packaging.version import grpc # type: ignore from grpc.experimental import aio # type: ignore diff --git a/scripts/fixup_servicedirectory_v1_keywords.py b/scripts/fixup_servicedirectory_v1_keywords.py new file mode 100644 index 00000000..892e98cf --- /dev/null +++ b/scripts/fixup_servicedirectory_v1_keywords.py @@ -0,0 +1,194 @@ +#! /usr/bin/env python3 +# -*- coding: utf-8 -*- +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +import argparse +import os +import libcst as cst +import pathlib +import sys +from typing import (Any, Callable, Dict, List, Sequence, Tuple) + + +def partition( + predicate: Callable[[Any], bool], + iterator: Sequence[Any] +) -> Tuple[List[Any], List[Any]]: + """A stable, out-of-place partition.""" + results = ([], []) + + for i in iterator: + results[int(predicate(i))].append(i) + + # Returns trueList, falseList + return results[1], results[0] + + +class servicedirectoryCallTransformer(cst.CSTTransformer): + CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') + METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { + 'create_endpoint': ('parent', 'endpoint_id', 'endpoint', ), + 'create_namespace': ('parent', 'namespace_id', 'namespace', ), + 'create_service': ('parent', 'service_id', 'service', ), + 'delete_endpoint': ('name', ), + 'delete_namespace': ('name', ), + 'delete_service': ('name', ), + 'get_endpoint': ('name', ), + 'get_iam_policy': ('resource', 'options', ), + 'get_namespace': ('name', ), + 'get_service': ('name', ), + 'list_endpoints': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), + 'list_namespaces': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), + 'list_services': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), + 'resolve_service': ('name', 'max_endpoints', 'endpoint_filter', ), + 'set_iam_policy': ('resource', 'policy', ), + 'test_iam_permissions': ('resource', 'permissions', ), + 'update_endpoint': ('endpoint', 'update_mask', ), + 'update_namespace': ('namespace', 'update_mask', ), + 'update_service': ('service', 'update_mask', ), + } + + def leave_Call(self, original: cst.Call, updated: cst.Call) -> cst.CSTNode: + try: + key = original.func.attr.value + kword_params = self.METHOD_TO_PARAMS[key] + except (AttributeError, KeyError): + # Either not a method from the API or too convoluted to be sure. + return updated + + # If the existing code is valid, keyword args come after positional args. + # Therefore, all positional args must map to the first parameters. + args, kwargs = partition(lambda a: not bool(a.keyword), updated.args) + if any(k.keyword.value == "request" for k in kwargs): + # We've already fixed this file, don't fix it again. + return updated + + kwargs, ctrl_kwargs = partition( + lambda a: a.keyword.value not in self.CTRL_PARAMS, + kwargs + ) + + args, ctrl_args = args[:len(kword_params)], args[len(kword_params):] + ctrl_kwargs.extend(cst.Arg(value=a.value, keyword=cst.Name(value=ctrl)) + for a, ctrl in zip(ctrl_args, self.CTRL_PARAMS)) + + request_arg = cst.Arg( + value=cst.Dict([ + cst.DictElement( + cst.SimpleString("'{}'".format(name)), +cst.Element(value=arg.value) + ) + # Note: the args + kwargs looks silly, but keep in mind that + # the control parameters had to be stripped out, and that + # those could have been passed positionally or by keyword. + for name, arg in zip(kword_params, args + kwargs)]), + keyword=cst.Name("request") + ) + + return updated.with_changes( + args=[request_arg] + ctrl_kwargs + ) + + +def fix_files( + in_dir: pathlib.Path, + out_dir: pathlib.Path, + *, + transformer=servicedirectoryCallTransformer(), +): + """Duplicate the input dir to the output dir, fixing file method calls. + + Preconditions: + * in_dir is a real directory + * out_dir is a real, empty directory + """ + pyfile_gen = ( + pathlib.Path(os.path.join(root, f)) + for root, _, files in os.walk(in_dir) + for f in files if os.path.splitext(f)[1] == ".py" + ) + + for fpath in pyfile_gen: + with open(fpath, 'r') as f: + src = f.read() + + # Parse the code and insert method call fixes. + tree = cst.parse_module(src) + updated = tree.visit(transformer) + + # Create the path and directory structure for the new file. + updated_path = out_dir.joinpath(fpath.relative_to(in_dir)) + updated_path.parent.mkdir(parents=True, exist_ok=True) + + # Generate the updated source file at the corresponding path. + with open(updated_path, 'w') as f: + f.write(updated.code) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + description="""Fix up source that uses the servicedirectory client library. + +The existing sources are NOT overwritten but are copied to output_dir with changes made. + +Note: This tool operates at a best-effort level at converting positional + parameters in client method calls to keyword based parameters. + Cases where it WILL FAIL include + A) * or ** expansion in a method call. + B) Calls via function or method alias (includes free function calls) + C) Indirect or dispatched calls (e.g. the method is looked up dynamically) + + These all constitute false negatives. The tool will also detect false + positives when an API method shares a name with another method. +""") + parser.add_argument( + '-d', + '--input-directory', + required=True, + dest='input_dir', + help='the input directory to walk for python files to fix up', + ) + parser.add_argument( + '-o', + '--output-directory', + required=True, + dest='output_dir', + help='the directory to output files fixed via un-flattening', + ) + args = parser.parse_args() + input_dir = pathlib.Path(args.input_dir) + output_dir = pathlib.Path(args.output_dir) + if not input_dir.is_dir(): + print( + f"input directory '{input_dir}' does not exist or is not a directory", + file=sys.stderr, + ) + sys.exit(-1) + + if not output_dir.is_dir(): + print( + f"output directory '{output_dir}' does not exist or is not a directory", + file=sys.stderr, + ) + sys.exit(-1) + + if os.listdir(output_dir): + print( + f"output directory '{output_dir}' is not empty", + file=sys.stderr, + ) + sys.exit(-1) + + fix_files(input_dir, output_dir) diff --git a/scripts/fixup_servicedirectory_v1beta1_keywords.py b/scripts/fixup_servicedirectory_v1beta1_keywords.py new file mode 100644 index 00000000..892e98cf --- /dev/null +++ b/scripts/fixup_servicedirectory_v1beta1_keywords.py @@ -0,0 +1,194 @@ +#! /usr/bin/env python3 +# -*- coding: utf-8 -*- +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +import argparse +import os +import libcst as cst +import pathlib +import sys +from typing import (Any, Callable, Dict, List, Sequence, Tuple) + + +def partition( + predicate: Callable[[Any], bool], + iterator: Sequence[Any] +) -> Tuple[List[Any], List[Any]]: + """A stable, out-of-place partition.""" + results = ([], []) + + for i in iterator: + results[int(predicate(i))].append(i) + + # Returns trueList, falseList + return results[1], results[0] + + +class servicedirectoryCallTransformer(cst.CSTTransformer): + CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') + METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { + 'create_endpoint': ('parent', 'endpoint_id', 'endpoint', ), + 'create_namespace': ('parent', 'namespace_id', 'namespace', ), + 'create_service': ('parent', 'service_id', 'service', ), + 'delete_endpoint': ('name', ), + 'delete_namespace': ('name', ), + 'delete_service': ('name', ), + 'get_endpoint': ('name', ), + 'get_iam_policy': ('resource', 'options', ), + 'get_namespace': ('name', ), + 'get_service': ('name', ), + 'list_endpoints': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), + 'list_namespaces': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), + 'list_services': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), + 'resolve_service': ('name', 'max_endpoints', 'endpoint_filter', ), + 'set_iam_policy': ('resource', 'policy', ), + 'test_iam_permissions': ('resource', 'permissions', ), + 'update_endpoint': ('endpoint', 'update_mask', ), + 'update_namespace': ('namespace', 'update_mask', ), + 'update_service': ('service', 'update_mask', ), + } + + def leave_Call(self, original: cst.Call, updated: cst.Call) -> cst.CSTNode: + try: + key = original.func.attr.value + kword_params = self.METHOD_TO_PARAMS[key] + except (AttributeError, KeyError): + # Either not a method from the API or too convoluted to be sure. + return updated + + # If the existing code is valid, keyword args come after positional args. + # Therefore, all positional args must map to the first parameters. + args, kwargs = partition(lambda a: not bool(a.keyword), updated.args) + if any(k.keyword.value == "request" for k in kwargs): + # We've already fixed this file, don't fix it again. + return updated + + kwargs, ctrl_kwargs = partition( + lambda a: a.keyword.value not in self.CTRL_PARAMS, + kwargs + ) + + args, ctrl_args = args[:len(kword_params)], args[len(kword_params):] + ctrl_kwargs.extend(cst.Arg(value=a.value, keyword=cst.Name(value=ctrl)) + for a, ctrl in zip(ctrl_args, self.CTRL_PARAMS)) + + request_arg = cst.Arg( + value=cst.Dict([ + cst.DictElement( + cst.SimpleString("'{}'".format(name)), +cst.Element(value=arg.value) + ) + # Note: the args + kwargs looks silly, but keep in mind that + # the control parameters had to be stripped out, and that + # those could have been passed positionally or by keyword. + for name, arg in zip(kword_params, args + kwargs)]), + keyword=cst.Name("request") + ) + + return updated.with_changes( + args=[request_arg] + ctrl_kwargs + ) + + +def fix_files( + in_dir: pathlib.Path, + out_dir: pathlib.Path, + *, + transformer=servicedirectoryCallTransformer(), +): + """Duplicate the input dir to the output dir, fixing file method calls. + + Preconditions: + * in_dir is a real directory + * out_dir is a real, empty directory + """ + pyfile_gen = ( + pathlib.Path(os.path.join(root, f)) + for root, _, files in os.walk(in_dir) + for f in files if os.path.splitext(f)[1] == ".py" + ) + + for fpath in pyfile_gen: + with open(fpath, 'r') as f: + src = f.read() + + # Parse the code and insert method call fixes. + tree = cst.parse_module(src) + updated = tree.visit(transformer) + + # Create the path and directory structure for the new file. + updated_path = out_dir.joinpath(fpath.relative_to(in_dir)) + updated_path.parent.mkdir(parents=True, exist_ok=True) + + # Generate the updated source file at the corresponding path. + with open(updated_path, 'w') as f: + f.write(updated.code) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + description="""Fix up source that uses the servicedirectory client library. + +The existing sources are NOT overwritten but are copied to output_dir with changes made. + +Note: This tool operates at a best-effort level at converting positional + parameters in client method calls to keyword based parameters. + Cases where it WILL FAIL include + A) * or ** expansion in a method call. + B) Calls via function or method alias (includes free function calls) + C) Indirect or dispatched calls (e.g. the method is looked up dynamically) + + These all constitute false negatives. The tool will also detect false + positives when an API method shares a name with another method. +""") + parser.add_argument( + '-d', + '--input-directory', + required=True, + dest='input_dir', + help='the input directory to walk for python files to fix up', + ) + parser.add_argument( + '-o', + '--output-directory', + required=True, + dest='output_dir', + help='the directory to output files fixed via un-flattening', + ) + args = parser.parse_args() + input_dir = pathlib.Path(args.input_dir) + output_dir = pathlib.Path(args.output_dir) + if not input_dir.is_dir(): + print( + f"input directory '{input_dir}' does not exist or is not a directory", + file=sys.stderr, + ) + sys.exit(-1) + + if not output_dir.is_dir(): + print( + f"output directory '{output_dir}' does not exist or is not a directory", + file=sys.stderr, + ) + sys.exit(-1) + + if os.listdir(output_dir): + print( + f"output directory '{output_dir}' is not empty", + file=sys.stderr, + ) + sys.exit(-1) + + fix_files(input_dir, output_dir) diff --git a/setup.py b/setup.py index 1ea7f799..d95f617d 100644 --- a/setup.py +++ b/setup.py @@ -43,10 +43,9 @@ # NOTE: Maintainers, please do not require google-api-core>=2.x.x # Until this issue is closed # https://github.com/googleapis/google-cloud-python/issues/10566 - "google-api-core >= 1.22.2, <3.0.0dev", + "google-api-core >= 1.28.0, <3.0.0dev", "proto-plus >= 1.10.0", "grpc-google-iam-v1", - "packaging >= 14.3", ), python_requires=">=3.6", classifiers=[ diff --git a/testing/constraints-3.6.txt b/testing/constraints-3.6.txt index ac7154ec..2bbe8b40 100644 --- a/testing/constraints-3.6.txt +++ b/testing/constraints-3.6.txt @@ -5,8 +5,6 @@ # # e.g., if setup.py has "foo >= 1.14.0, < 2.0.0dev", # Then this file should have foo==1.14.0 -google-api-core==1.26.0 +google-api-core==1.28.0 proto-plus==1.10.0 grpc-google-iam-v1==0.12.3 -packaging==14.3 -google-auth==1.24.0 # TODO: remove when google-auth>=1.25.0 is required transitively through google-api-core diff --git a/tests/unit/gapic/servicedirectory_v1/test_lookup_service.py b/tests/unit/gapic/servicedirectory_v1/test_lookup_service.py index 93f8333f..644fc290 100644 --- a/tests/unit/gapic/servicedirectory_v1/test_lookup_service.py +++ b/tests/unit/gapic/servicedirectory_v1/test_lookup_service.py @@ -15,7 +15,6 @@ # import os import mock -import packaging.version import grpc from grpc.experimental import aio @@ -37,29 +36,12 @@ ) from google.cloud.servicedirectory_v1.services.lookup_service import LookupServiceClient from google.cloud.servicedirectory_v1.services.lookup_service import transports -from google.cloud.servicedirectory_v1.services.lookup_service.transports.base import ( - _GOOGLE_AUTH_VERSION, -) from google.cloud.servicedirectory_v1.types import lookup_service from google.cloud.servicedirectory_v1.types import service from google.oauth2 import service_account import google.auth -# TODO(busunkim): Once google-auth >= 1.25.0 is required transitively -# through google-api-core: -# - Delete the auth "less than" test cases -# - Delete these pytest markers (Make the "greater than or equal to" tests the default). -requires_google_auth_lt_1_25_0 = pytest.mark.skipif( - packaging.version.parse(_GOOGLE_AUTH_VERSION) >= packaging.version.parse("1.25.0"), - reason="This test requires google-auth < 1.25.0", -) -requires_google_auth_gte_1_25_0 = pytest.mark.skipif( - packaging.version.parse(_GOOGLE_AUTH_VERSION) < packaging.version.parse("1.25.0"), - reason="This test requires google-auth >= 1.25.0", -) - - def client_cert_source_callback(): return b"cert bytes", b"key bytes" @@ -216,7 +198,7 @@ def test_lookup_service_client_client_options( options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -233,7 +215,7 @@ def test_lookup_service_client_client_options( with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -250,7 +232,7 @@ def test_lookup_service_client_client_options( with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -279,7 +261,7 @@ def test_lookup_service_client_client_options( options = client_options.ClientOptions(quota_project_id="octopus") with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -338,7 +320,7 @@ def test_lookup_service_client_mtls_env_auto( ) with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) if use_client_cert_env == "false": expected_client_cert_source = None @@ -380,7 +362,7 @@ def test_lookup_service_client_mtls_env_auto( expected_client_cert_source = client_cert_source_callback patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -402,7 +384,7 @@ def test_lookup_service_client_mtls_env_auto( return_value=False, ): patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -433,7 +415,7 @@ def test_lookup_service_client_client_options_scopes( options = client_options.ClientOptions(scopes=["1", "2"],) with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -464,7 +446,7 @@ def test_lookup_service_client_client_options_credentials_file( options = client_options.ClientOptions(credentials_file="credentials.json") with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file="credentials.json", @@ -734,7 +716,6 @@ def test_lookup_service_base_transport(): transport.close() -@requires_google_auth_gte_1_25_0 def test_lookup_service_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file with mock.patch.object( @@ -755,26 +736,6 @@ def test_lookup_service_base_transport_with_credentials_file(): ) -@requires_google_auth_lt_1_25_0 -def test_lookup_service_base_transport_with_credentials_file_old_google_auth(): - # Instantiate the base transport with a credentials file - with mock.patch.object( - google.auth, "load_credentials_from_file", autospec=True - ) as load_creds, mock.patch( - "google.cloud.servicedirectory_v1.services.lookup_service.transports.LookupServiceTransport._prep_wrapped_messages" - ) as Transport: - Transport.return_value = None - load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.LookupServiceTransport( - credentials_file="credentials.json", quota_project_id="octopus", - ) - load_creds.assert_called_once_with( - "credentials.json", - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id="octopus", - ) - - def test_lookup_service_base_transport_with_adc(): # Test the default credentials are used if credentials and credentials_file are None. with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch( @@ -786,7 +747,6 @@ def test_lookup_service_base_transport_with_adc(): adc.assert_called_once() -@requires_google_auth_gte_1_25_0 def test_lookup_service_auth_adc(): # If no credentials are provided, we should use ADC credentials. with mock.patch.object(google.auth, "default", autospec=True) as adc: @@ -799,18 +759,6 @@ def test_lookup_service_auth_adc(): ) -@requires_google_auth_lt_1_25_0 -def test_lookup_service_auth_adc_old_google_auth(): - # If no credentials are provided, we should use ADC credentials. - with mock.patch.object(google.auth, "default", autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - LookupServiceClient() - adc.assert_called_once_with( - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id=None, - ) - - @pytest.mark.parametrize( "transport_class", [ @@ -818,7 +766,6 @@ def test_lookup_service_auth_adc_old_google_auth(): transports.LookupServiceGrpcAsyncIOTransport, ], ) -@requires_google_auth_gte_1_25_0 def test_lookup_service_transport_auth_adc(transport_class): # If credentials and host are not provided, the transport class should use # ADC credentials. @@ -832,26 +779,6 @@ def test_lookup_service_transport_auth_adc(transport_class): ) -@pytest.mark.parametrize( - "transport_class", - [ - transports.LookupServiceGrpcTransport, - transports.LookupServiceGrpcAsyncIOTransport, - ], -) -@requires_google_auth_lt_1_25_0 -def test_lookup_service_transport_auth_adc_old_google_auth(transport_class): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object(google.auth, "default", autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class(quota_project_id="octopus") - adc.assert_called_once_with( - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id="octopus", - ) - - @pytest.mark.parametrize( "transport_class,grpc_helpers", [ diff --git a/tests/unit/gapic/servicedirectory_v1/test_registration_service.py b/tests/unit/gapic/servicedirectory_v1/test_registration_service.py index 77807a8a..eaa9ce97 100644 --- a/tests/unit/gapic/servicedirectory_v1/test_registration_service.py +++ b/tests/unit/gapic/servicedirectory_v1/test_registration_service.py @@ -15,7 +15,6 @@ # import os import mock -import packaging.version import grpc from grpc.experimental import aio @@ -40,9 +39,6 @@ ) from google.cloud.servicedirectory_v1.services.registration_service import pagers from google.cloud.servicedirectory_v1.services.registration_service import transports -from google.cloud.servicedirectory_v1.services.registration_service.transports.base import ( - _GOOGLE_AUTH_VERSION, -) from google.cloud.servicedirectory_v1.types import endpoint from google.cloud.servicedirectory_v1.types import endpoint as gcs_endpoint from google.cloud.servicedirectory_v1.types import namespace @@ -59,20 +55,6 @@ import google.auth -# TODO(busunkim): Once google-auth >= 1.25.0 is required transitively -# through google-api-core: -# - Delete the auth "less than" test cases -# - Delete these pytest markers (Make the "greater than or equal to" tests the default). -requires_google_auth_lt_1_25_0 = pytest.mark.skipif( - packaging.version.parse(_GOOGLE_AUTH_VERSION) >= packaging.version.parse("1.25.0"), - reason="This test requires google-auth < 1.25.0", -) -requires_google_auth_gte_1_25_0 = pytest.mark.skipif( - packaging.version.parse(_GOOGLE_AUTH_VERSION) < packaging.version.parse("1.25.0"), - reason="This test requires google-auth >= 1.25.0", -) - - def client_cert_source_callback(): return b"cert bytes", b"key bytes" @@ -234,7 +216,7 @@ def test_registration_service_client_client_options( options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -251,7 +233,7 @@ def test_registration_service_client_client_options( with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -268,7 +250,7 @@ def test_registration_service_client_client_options( with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -297,7 +279,7 @@ def test_registration_service_client_client_options( options = client_options.ClientOptions(quota_project_id="octopus") with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -366,7 +348,7 @@ def test_registration_service_client_mtls_env_auto( ) with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) if use_client_cert_env == "false": expected_client_cert_source = None @@ -408,7 +390,7 @@ def test_registration_service_client_mtls_env_auto( expected_client_cert_source = client_cert_source_callback patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -430,7 +412,7 @@ def test_registration_service_client_mtls_env_auto( return_value=False, ): patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -465,7 +447,7 @@ def test_registration_service_client_client_options_scopes( options = client_options.ClientOptions(scopes=["1", "2"],) with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -500,7 +482,7 @@ def test_registration_service_client_client_options_credentials_file( options = client_options.ClientOptions(credentials_file="credentials.json") with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file="credentials.json", @@ -4791,7 +4773,6 @@ def test_registration_service_base_transport(): transport.close() -@requires_google_auth_gte_1_25_0 def test_registration_service_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file with mock.patch.object( @@ -4812,26 +4793,6 @@ def test_registration_service_base_transport_with_credentials_file(): ) -@requires_google_auth_lt_1_25_0 -def test_registration_service_base_transport_with_credentials_file_old_google_auth(): - # Instantiate the base transport with a credentials file - with mock.patch.object( - google.auth, "load_credentials_from_file", autospec=True - ) as load_creds, mock.patch( - "google.cloud.servicedirectory_v1.services.registration_service.transports.RegistrationServiceTransport._prep_wrapped_messages" - ) as Transport: - Transport.return_value = None - load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.RegistrationServiceTransport( - credentials_file="credentials.json", quota_project_id="octopus", - ) - load_creds.assert_called_once_with( - "credentials.json", - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id="octopus", - ) - - def test_registration_service_base_transport_with_adc(): # Test the default credentials are used if credentials and credentials_file are None. with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch( @@ -4843,7 +4804,6 @@ def test_registration_service_base_transport_with_adc(): adc.assert_called_once() -@requires_google_auth_gte_1_25_0 def test_registration_service_auth_adc(): # If no credentials are provided, we should use ADC credentials. with mock.patch.object(google.auth, "default", autospec=True) as adc: @@ -4856,18 +4816,6 @@ def test_registration_service_auth_adc(): ) -@requires_google_auth_lt_1_25_0 -def test_registration_service_auth_adc_old_google_auth(): - # If no credentials are provided, we should use ADC credentials. - with mock.patch.object(google.auth, "default", autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - RegistrationServiceClient() - adc.assert_called_once_with( - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id=None, - ) - - @pytest.mark.parametrize( "transport_class", [ @@ -4875,7 +4823,6 @@ def test_registration_service_auth_adc_old_google_auth(): transports.RegistrationServiceGrpcAsyncIOTransport, ], ) -@requires_google_auth_gte_1_25_0 def test_registration_service_transport_auth_adc(transport_class): # If credentials and host are not provided, the transport class should use # ADC credentials. @@ -4889,26 +4836,6 @@ def test_registration_service_transport_auth_adc(transport_class): ) -@pytest.mark.parametrize( - "transport_class", - [ - transports.RegistrationServiceGrpcTransport, - transports.RegistrationServiceGrpcAsyncIOTransport, - ], -) -@requires_google_auth_lt_1_25_0 -def test_registration_service_transport_auth_adc_old_google_auth(transport_class): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object(google.auth, "default", autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class(quota_project_id="octopus") - adc.assert_called_once_with( - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id="octopus", - ) - - @pytest.mark.parametrize( "transport_class,grpc_helpers", [ diff --git a/tests/unit/gapic/servicedirectory_v1beta1/test_lookup_service.py b/tests/unit/gapic/servicedirectory_v1beta1/test_lookup_service.py index e3ade2d0..63a706ee 100644 --- a/tests/unit/gapic/servicedirectory_v1beta1/test_lookup_service.py +++ b/tests/unit/gapic/servicedirectory_v1beta1/test_lookup_service.py @@ -15,7 +15,6 @@ # import os import mock -import packaging.version import grpc from grpc.experimental import aio @@ -39,29 +38,12 @@ LookupServiceClient, ) from google.cloud.servicedirectory_v1beta1.services.lookup_service import transports -from google.cloud.servicedirectory_v1beta1.services.lookup_service.transports.base import ( - _GOOGLE_AUTH_VERSION, -) from google.cloud.servicedirectory_v1beta1.types import lookup_service from google.cloud.servicedirectory_v1beta1.types import service from google.oauth2 import service_account import google.auth -# TODO(busunkim): Once google-auth >= 1.25.0 is required transitively -# through google-api-core: -# - Delete the auth "less than" test cases -# - Delete these pytest markers (Make the "greater than or equal to" tests the default). -requires_google_auth_lt_1_25_0 = pytest.mark.skipif( - packaging.version.parse(_GOOGLE_AUTH_VERSION) >= packaging.version.parse("1.25.0"), - reason="This test requires google-auth < 1.25.0", -) -requires_google_auth_gte_1_25_0 = pytest.mark.skipif( - packaging.version.parse(_GOOGLE_AUTH_VERSION) < packaging.version.parse("1.25.0"), - reason="This test requires google-auth >= 1.25.0", -) - - def client_cert_source_callback(): return b"cert bytes", b"key bytes" @@ -218,7 +200,7 @@ def test_lookup_service_client_client_options( options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -235,7 +217,7 @@ def test_lookup_service_client_client_options( with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -252,7 +234,7 @@ def test_lookup_service_client_client_options( with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -281,7 +263,7 @@ def test_lookup_service_client_client_options( options = client_options.ClientOptions(quota_project_id="octopus") with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -340,7 +322,7 @@ def test_lookup_service_client_mtls_env_auto( ) with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) if use_client_cert_env == "false": expected_client_cert_source = None @@ -382,7 +364,7 @@ def test_lookup_service_client_mtls_env_auto( expected_client_cert_source = client_cert_source_callback patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -404,7 +386,7 @@ def test_lookup_service_client_mtls_env_auto( return_value=False, ): patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -435,7 +417,7 @@ def test_lookup_service_client_client_options_scopes( options = client_options.ClientOptions(scopes=["1", "2"],) with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -466,7 +448,7 @@ def test_lookup_service_client_client_options_credentials_file( options = client_options.ClientOptions(credentials_file="credentials.json") with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file="credentials.json", @@ -736,7 +718,6 @@ def test_lookup_service_base_transport(): transport.close() -@requires_google_auth_gte_1_25_0 def test_lookup_service_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file with mock.patch.object( @@ -757,26 +738,6 @@ def test_lookup_service_base_transport_with_credentials_file(): ) -@requires_google_auth_lt_1_25_0 -def test_lookup_service_base_transport_with_credentials_file_old_google_auth(): - # Instantiate the base transport with a credentials file - with mock.patch.object( - google.auth, "load_credentials_from_file", autospec=True - ) as load_creds, mock.patch( - "google.cloud.servicedirectory_v1beta1.services.lookup_service.transports.LookupServiceTransport._prep_wrapped_messages" - ) as Transport: - Transport.return_value = None - load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.LookupServiceTransport( - credentials_file="credentials.json", quota_project_id="octopus", - ) - load_creds.assert_called_once_with( - "credentials.json", - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id="octopus", - ) - - def test_lookup_service_base_transport_with_adc(): # Test the default credentials are used if credentials and credentials_file are None. with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch( @@ -788,7 +749,6 @@ def test_lookup_service_base_transport_with_adc(): adc.assert_called_once() -@requires_google_auth_gte_1_25_0 def test_lookup_service_auth_adc(): # If no credentials are provided, we should use ADC credentials. with mock.patch.object(google.auth, "default", autospec=True) as adc: @@ -801,18 +761,6 @@ def test_lookup_service_auth_adc(): ) -@requires_google_auth_lt_1_25_0 -def test_lookup_service_auth_adc_old_google_auth(): - # If no credentials are provided, we should use ADC credentials. - with mock.patch.object(google.auth, "default", autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - LookupServiceClient() - adc.assert_called_once_with( - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id=None, - ) - - @pytest.mark.parametrize( "transport_class", [ @@ -820,7 +768,6 @@ def test_lookup_service_auth_adc_old_google_auth(): transports.LookupServiceGrpcAsyncIOTransport, ], ) -@requires_google_auth_gte_1_25_0 def test_lookup_service_transport_auth_adc(transport_class): # If credentials and host are not provided, the transport class should use # ADC credentials. @@ -834,26 +781,6 @@ def test_lookup_service_transport_auth_adc(transport_class): ) -@pytest.mark.parametrize( - "transport_class", - [ - transports.LookupServiceGrpcTransport, - transports.LookupServiceGrpcAsyncIOTransport, - ], -) -@requires_google_auth_lt_1_25_0 -def test_lookup_service_transport_auth_adc_old_google_auth(transport_class): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object(google.auth, "default", autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class(quota_project_id="octopus") - adc.assert_called_once_with( - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id="octopus", - ) - - @pytest.mark.parametrize( "transport_class,grpc_helpers", [ diff --git a/tests/unit/gapic/servicedirectory_v1beta1/test_registration_service.py b/tests/unit/gapic/servicedirectory_v1beta1/test_registration_service.py index b26c4798..673532a5 100644 --- a/tests/unit/gapic/servicedirectory_v1beta1/test_registration_service.py +++ b/tests/unit/gapic/servicedirectory_v1beta1/test_registration_service.py @@ -15,7 +15,6 @@ # import os import mock -import packaging.version import grpc from grpc.experimental import aio @@ -42,9 +41,6 @@ from google.cloud.servicedirectory_v1beta1.services.registration_service import ( transports, ) -from google.cloud.servicedirectory_v1beta1.services.registration_service.transports.base import ( - _GOOGLE_AUTH_VERSION, -) from google.cloud.servicedirectory_v1beta1.types import endpoint from google.cloud.servicedirectory_v1beta1.types import endpoint as gcs_endpoint from google.cloud.servicedirectory_v1beta1.types import namespace @@ -62,20 +58,6 @@ import google.auth -# TODO(busunkim): Once google-auth >= 1.25.0 is required transitively -# through google-api-core: -# - Delete the auth "less than" test cases -# - Delete these pytest markers (Make the "greater than or equal to" tests the default). -requires_google_auth_lt_1_25_0 = pytest.mark.skipif( - packaging.version.parse(_GOOGLE_AUTH_VERSION) >= packaging.version.parse("1.25.0"), - reason="This test requires google-auth < 1.25.0", -) -requires_google_auth_gte_1_25_0 = pytest.mark.skipif( - packaging.version.parse(_GOOGLE_AUTH_VERSION) < packaging.version.parse("1.25.0"), - reason="This test requires google-auth >= 1.25.0", -) - - def client_cert_source_callback(): return b"cert bytes", b"key bytes" @@ -237,7 +219,7 @@ def test_registration_service_client_client_options( options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -254,7 +236,7 @@ def test_registration_service_client_client_options( with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -271,7 +253,7 @@ def test_registration_service_client_client_options( with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -300,7 +282,7 @@ def test_registration_service_client_client_options( options = client_options.ClientOptions(quota_project_id="octopus") with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -369,7 +351,7 @@ def test_registration_service_client_mtls_env_auto( ) with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) if use_client_cert_env == "false": expected_client_cert_source = None @@ -411,7 +393,7 @@ def test_registration_service_client_mtls_env_auto( expected_client_cert_source = client_cert_source_callback patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -433,7 +415,7 @@ def test_registration_service_client_mtls_env_auto( return_value=False, ): patched.return_value = None - client = client_class() + client = client_class(transport=transport_name) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -468,7 +450,7 @@ def test_registration_service_client_client_options_scopes( options = client_options.ClientOptions(scopes=["1", "2"],) with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file=None, @@ -503,7 +485,7 @@ def test_registration_service_client_client_options_credentials_file( options = client_options.ClientOptions(credentials_file="credentials.json") with mock.patch.object(transport_class, "__init__") as patched: patched.return_value = None - client = client_class(client_options=options) + client = client_class(transport=transport_name, client_options=options) patched.assert_called_once_with( credentials=None, credentials_file="credentials.json", @@ -4824,7 +4806,6 @@ def test_registration_service_base_transport(): transport.close() -@requires_google_auth_gte_1_25_0 def test_registration_service_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file with mock.patch.object( @@ -4845,26 +4826,6 @@ def test_registration_service_base_transport_with_credentials_file(): ) -@requires_google_auth_lt_1_25_0 -def test_registration_service_base_transport_with_credentials_file_old_google_auth(): - # Instantiate the base transport with a credentials file - with mock.patch.object( - google.auth, "load_credentials_from_file", autospec=True - ) as load_creds, mock.patch( - "google.cloud.servicedirectory_v1beta1.services.registration_service.transports.RegistrationServiceTransport._prep_wrapped_messages" - ) as Transport: - Transport.return_value = None - load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.RegistrationServiceTransport( - credentials_file="credentials.json", quota_project_id="octopus", - ) - load_creds.assert_called_once_with( - "credentials.json", - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id="octopus", - ) - - def test_registration_service_base_transport_with_adc(): # Test the default credentials are used if credentials and credentials_file are None. with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch( @@ -4876,7 +4837,6 @@ def test_registration_service_base_transport_with_adc(): adc.assert_called_once() -@requires_google_auth_gte_1_25_0 def test_registration_service_auth_adc(): # If no credentials are provided, we should use ADC credentials. with mock.patch.object(google.auth, "default", autospec=True) as adc: @@ -4889,18 +4849,6 @@ def test_registration_service_auth_adc(): ) -@requires_google_auth_lt_1_25_0 -def test_registration_service_auth_adc_old_google_auth(): - # If no credentials are provided, we should use ADC credentials. - with mock.patch.object(google.auth, "default", autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - RegistrationServiceClient() - adc.assert_called_once_with( - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id=None, - ) - - @pytest.mark.parametrize( "transport_class", [ @@ -4908,7 +4856,6 @@ def test_registration_service_auth_adc_old_google_auth(): transports.RegistrationServiceGrpcAsyncIOTransport, ], ) -@requires_google_auth_gte_1_25_0 def test_registration_service_transport_auth_adc(transport_class): # If credentials and host are not provided, the transport class should use # ADC credentials. @@ -4922,26 +4869,6 @@ def test_registration_service_transport_auth_adc(transport_class): ) -@pytest.mark.parametrize( - "transport_class", - [ - transports.RegistrationServiceGrpcTransport, - transports.RegistrationServiceGrpcAsyncIOTransport, - ], -) -@requires_google_auth_lt_1_25_0 -def test_registration_service_transport_auth_adc_old_google_auth(transport_class): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object(google.auth, "default", autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class(quota_project_id="octopus") - adc.assert_called_once_with( - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id="octopus", - ) - - @pytest.mark.parametrize( "transport_class,grpc_helpers", [