diff --git a/google/cloud/accessapproval_v1/services/access_approval/async_client.py b/google/cloud/accessapproval_v1/services/access_approval/async_client.py index 00db042..5c92c8f 100644 --- a/google/cloud/accessapproval_v1/services/access_approval/async_client.py +++ b/google/cloud/accessapproval_v1/services/access_approval/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.accessapproval_v1.services.access_approval import pagers from google.cloud.accessapproval_v1.types import accessapproval from google.protobuf import field_mask_pb2 # type: ignore @@ -198,10 +200,10 @@ def __init__( async def list_approval_requests( self, - request: accessapproval.ListApprovalRequestsMessage = None, + request: Union[accessapproval.ListApprovalRequestsMessage, 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.ListApprovalRequestsAsyncPager: @@ -211,7 +213,7 @@ async def list_approval_requests( order is reverse chronological. Args: - request (:class:`google.cloud.accessapproval_v1.types.ListApprovalRequestsMessage`): + request (Union[google.cloud.accessapproval_v1.types.ListApprovalRequestsMessage, dict]): The request object. Request to list approval requests. parent (:class:`str`): The parent resource. This may be @@ -290,10 +292,10 @@ async def list_approval_requests( async def get_approval_request( self, - request: accessapproval.GetApprovalRequestMessage = None, + request: Union[accessapproval.GetApprovalRequestMessage, 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]] = (), ) -> accessapproval.ApprovalRequest: @@ -301,7 +303,7 @@ async def get_approval_request( not exist. Args: - request (:class:`google.cloud.accessapproval_v1.types.GetApprovalRequestMessage`): + request (Union[google.cloud.accessapproval_v1.types.GetApprovalRequestMessage, dict]): The request object. Request to get an approval request. name (:class:`str`): Name of the approval request to @@ -370,9 +372,9 @@ async def get_approval_request( async def approve_approval_request( self, - request: accessapproval.ApproveApprovalRequestMessage = None, + request: Union[accessapproval.ApproveApprovalRequestMessage, dict] = None, *, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> accessapproval.ApprovalRequest: @@ -383,7 +385,7 @@ async def approve_approval_request( pending state. Args: - request (:class:`google.cloud.accessapproval_v1.types.ApproveApprovalRequestMessage`): + request (Union[google.cloud.accessapproval_v1.types.ApproveApprovalRequestMessage, dict]): The request object. Request to approve an ApprovalRequest. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -423,9 +425,9 @@ async def approve_approval_request( async def dismiss_approval_request( self, - request: accessapproval.DismissApprovalRequestMessage = None, + request: Union[accessapproval.DismissApprovalRequestMessage, dict] = None, *, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> accessapproval.ApprovalRequest: @@ -441,7 +443,7 @@ async def dismiss_approval_request( a pending state. Args: - request (:class:`google.cloud.accessapproval_v1.types.DismissApprovalRequestMessage`): + request (Union[google.cloud.accessapproval_v1.types.DismissApprovalRequestMessage, dict]): The request object. Request to dismiss an approval request. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -481,10 +483,10 @@ async def dismiss_approval_request( async def get_access_approval_settings( self, - request: accessapproval.GetAccessApprovalSettingsMessage = None, + request: Union[accessapproval.GetAccessApprovalSettingsMessage, 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]] = (), ) -> accessapproval.AccessApprovalSettings: @@ -492,7 +494,7 @@ async def get_access_approval_settings( or organization. Args: - request (:class:`google.cloud.accessapproval_v1.types.GetAccessApprovalSettingsMessage`): + request (Union[google.cloud.accessapproval_v1.types.GetAccessApprovalSettingsMessage, dict]): The request object. Request to get access approval settings. name (:class:`str`): @@ -563,11 +565,11 @@ async def get_access_approval_settings( async def update_access_approval_settings( self, - request: accessapproval.UpdateAccessApprovalSettingsMessage = None, + request: Union[accessapproval.UpdateAccessApprovalSettingsMessage, dict] = None, *, settings: accessapproval.AccessApprovalSettings = 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]] = (), ) -> accessapproval.AccessApprovalSettings: @@ -576,7 +578,7 @@ async def update_access_approval_settings( field_mask. Args: - request (:class:`google.cloud.accessapproval_v1.types.UpdateAccessApprovalSettingsMessage`): + request (Union[google.cloud.accessapproval_v1.types.UpdateAccessApprovalSettingsMessage, dict]): The request object. Request to update access approval settings. settings (:class:`google.cloud.accessapproval_v1.types.AccessApprovalSettings`): @@ -656,10 +658,10 @@ async def update_access_approval_settings( async def delete_access_approval_settings( self, - request: accessapproval.DeleteAccessApprovalSettingsMessage = None, + request: Union[accessapproval.DeleteAccessApprovalSettingsMessage, 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: @@ -673,7 +675,7 @@ async def delete_access_approval_settings( inherited. Args: - request (:class:`google.cloud.accessapproval_v1.types.DeleteAccessApprovalSettingsMessage`): + request (Union[google.cloud.accessapproval_v1.types.DeleteAccessApprovalSettingsMessage, dict]): The request object. Request to delete access approval settings. name (:class:`str`): diff --git a/google/cloud/accessapproval_v1/services/access_approval/client.py b/google/cloud/accessapproval_v1/services/access_approval/client.py index c2286d0..9af27f0 100644 --- a/google/cloud/accessapproval_v1/services/access_approval/client.py +++ b/google/cloud/accessapproval_v1/services/access_approval/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.accessapproval_v1.services.access_approval import pagers from google.cloud.accessapproval_v1.types import accessapproval from google.protobuf import field_mask_pb2 # type: ignore @@ -373,7 +375,7 @@ def list_approval_requests( request: Union[accessapproval.ListApprovalRequestsMessage, 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.ListApprovalRequestsPager: @@ -456,7 +458,7 @@ def get_approval_request( request: Union[accessapproval.GetApprovalRequestMessage, 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]] = (), ) -> accessapproval.ApprovalRequest: @@ -526,7 +528,7 @@ def approve_approval_request( self, request: Union[accessapproval.ApproveApprovalRequestMessage, dict] = None, *, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> accessapproval.ApprovalRequest: @@ -580,7 +582,7 @@ def dismiss_approval_request( self, request: Union[accessapproval.DismissApprovalRequestMessage, dict] = None, *, - retry: retries.Retry = gapic_v1.method.DEFAULT, + retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> accessapproval.ApprovalRequest: @@ -640,7 +642,7 @@ def get_access_approval_settings( request: Union[accessapproval.GetAccessApprovalSettingsMessage, 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]] = (), ) -> accessapproval.AccessApprovalSettings: @@ -716,7 +718,7 @@ def update_access_approval_settings( *, settings: accessapproval.AccessApprovalSettings = 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]] = (), ) -> accessapproval.AccessApprovalSettings: @@ -810,7 +812,7 @@ def delete_access_approval_settings( request: Union[accessapproval.DeleteAccessApprovalSettingsMessage, 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: diff --git a/google/cloud/accessapproval_v1/services/access_approval/transports/base.py b/google/cloud/accessapproval_v1/services/access_approval/transports/base.py index 5a2f264..9175da9 100644 --- a/google/cloud/accessapproval_v1/services/access_approval/transports/base.py +++ b/google/cloud/accessapproval_v1/services/access_approval/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 @@ -38,15 +37,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 AccessApprovalTransport(abc.ABC): """Abstract transport class for AccessApproval.""" @@ -96,7 +86,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 @@ -129,29 +119,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/accessapproval_v1/services/access_approval/transports/grpc_asyncio.py b/google/cloud/accessapproval_v1/services/access_approval/transports/grpc_asyncio.py index ad2188e..e1407bb 100644 --- a/google/cloud/accessapproval_v1/services/access_approval/transports/grpc_asyncio.py +++ b/google/cloud/accessapproval_v1/services/access_approval/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/accessapproval_v1/types/accessapproval.py b/google/cloud/accessapproval_v1/types/accessapproval.py index 6ef35da..6d78f27 100644 --- a/google/cloud/accessapproval_v1/types/accessapproval.py +++ b/google/cloud/accessapproval_v1/types/accessapproval.py @@ -163,6 +163,13 @@ class ResourceProperties(proto.Message): class ApprovalRequest(proto.Message): r"""A request for the customer to approve access to a resource. + This message has `oneof`_ fields (mutually exclusive fields). + For each oneof, at most one member field can be set at the same time. + Setting any member of the oneof automatically clears all other + members. + + .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields + Attributes: name (str): The resource name of the request. Format is @@ -194,8 +201,10 @@ class ApprovalRequest(proto.Message): time. approve (google.cloud.accessapproval_v1.types.ApproveDecision): Access was approved. + This field is a member of `oneof`_ ``decision``. dismiss (google.cloud.accessapproval_v1.types.DismissDecision): The request was dismissed. + This field is a member of `oneof`_ ``decision``. """ name = proto.Field(proto.STRING, number=1,) diff --git a/setup.py b/setup.py index ff144b6..470e5f5 100644 --- a/setup.py +++ b/setup.py @@ -28,9 +28,8 @@ # 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[grpc] >= 1.26.0, <3.0.0dev", + "google-api-core[grpc] >= 1.28.0, <3.0.0dev", "proto-plus >= 1.4.0", - "packaging >= 14.3", ] extras = {"libcst": "libcst >= 0.2.5"} @@ -81,7 +80,7 @@ scripts=["scripts/fixup_accessapproval_v1_keywords.py"], namespace_packages=namespaces, install_requires=dependencies, - extras_requires=extras, + extras_require=extras, include_package_data=True, zip_safe=False, ) diff --git a/testing/constraints-3.6.txt b/testing/constraints-3.6.txt index 90b6c31..9e0fb5a 100644 --- a/testing/constraints-3.6.txt +++ b/testing/constraints-3.6.txt @@ -4,8 +4,6 @@ # Pin the version to the lower bound. # e.g., if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0dev", # Then this file should have google-cloud-foo==1.14.0 -google-api-core==1.26.0 +google-api-core==1.28.0 proto-plus==1.10.0 libcst==0.2.5 -packaging==14.3 -google-auth==1.24.0 # TODO: remove when google-auth>=1.25.0 si transitively required through google-api-core diff --git a/tests/unit/gapic/accessapproval_v1/test_access_approval.py b/tests/unit/gapic/accessapproval_v1/test_access_approval.py index c2b26b4..f633082 100644 --- a/tests/unit/gapic/accessapproval_v1/test_access_approval.py +++ b/tests/unit/gapic/accessapproval_v1/test_access_approval.py @@ -15,7 +15,6 @@ # import os import mock -import packaging.version import grpc from grpc.experimental import aio @@ -38,9 +37,6 @@ from google.cloud.accessapproval_v1.services.access_approval import AccessApprovalClient from google.cloud.accessapproval_v1.services.access_approval import pagers from google.cloud.accessapproval_v1.services.access_approval import transports -from google.cloud.accessapproval_v1.services.access_approval.transports.base import ( - _GOOGLE_AUTH_VERSION, -) from google.cloud.accessapproval_v1.types import accessapproval from google.oauth2 import service_account from google.protobuf import field_mask_pb2 # type: ignore @@ -48,20 +44,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" @@ -218,7 +200,7 @@ def test_access_approval_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_access_approval_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_access_approval_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_access_approval_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_access_approval_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_access_approval_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_access_approval_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_access_approval_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_access_approval_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", @@ -2233,7 +2215,6 @@ def test_access_approval_base_transport(): transport.close() -@requires_google_auth_gte_1_25_0 def test_access_approval_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file with mock.patch.object( @@ -2254,26 +2235,6 @@ def test_access_approval_base_transport_with_credentials_file(): ) -@requires_google_auth_lt_1_25_0 -def test_access_approval_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.accessapproval_v1.services.access_approval.transports.AccessApprovalTransport._prep_wrapped_messages" - ) as Transport: - Transport.return_value = None - load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.AccessApprovalTransport( - 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_access_approval_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( @@ -2285,7 +2246,6 @@ def test_access_approval_base_transport_with_adc(): adc.assert_called_once() -@requires_google_auth_gte_1_25_0 def test_access_approval_auth_adc(): # If no credentials are provided, we should use ADC credentials. with mock.patch.object(google.auth, "default", autospec=True) as adc: @@ -2298,18 +2258,6 @@ def test_access_approval_auth_adc(): ) -@requires_google_auth_lt_1_25_0 -def test_access_approval_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) - AccessApprovalClient() - adc.assert_called_once_with( - scopes=("https://www.googleapis.com/auth/cloud-platform",), - quota_project_id=None, - ) - - @pytest.mark.parametrize( "transport_class", [ @@ -2317,7 +2265,6 @@ def test_access_approval_auth_adc_old_google_auth(): transports.AccessApprovalGrpcAsyncIOTransport, ], ) -@requires_google_auth_gte_1_25_0 def test_access_approval_transport_auth_adc(transport_class): # If credentials and host are not provided, the transport class should use # ADC credentials. @@ -2331,26 +2278,6 @@ def test_access_approval_transport_auth_adc(transport_class): ) -@pytest.mark.parametrize( - "transport_class", - [ - transports.AccessApprovalGrpcTransport, - transports.AccessApprovalGrpcAsyncIOTransport, - ], -) -@requires_google_auth_lt_1_25_0 -def test_access_approval_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", [